正規表現的解決法ではないのですが…
- 「,」で区切って配列化し、
- 配列の要素1つずつ確認して、
- 一つでも条件に満たないものがあれば
false
を戻す。
- 全部条件を満たしていれば
true
を戻す。
というのはいかがでしょうか?
javascript
1function validateNumbers(str) {
2 const numbers = str.split(','); // 「,」で分割して配列化
3
4 for (const n of numbers) { // 番号を1文ずつ確認
5 const isValid = /^\d{7}-\d{3}-\d{3}$/.test(n); // 「7桁 ハイフン 3桁 ハイフン 3桁」かどうか(true or false)
6 if (!isValid) return false; // falseだったらここで関数を終了し、falseを戻す
7 }
8
9 return true; // ↑の繰り返し処理が全部trueだったら、trueを戻す
10};
11
12console.log(validateNumbers('1234567-001-001')); // true
13console.log(validateNumbers('12345-001-001')); // false
14console.log(validateNumbers('1234567-001-001,3456789-001-001,5678901-001-001')); // true
15console.log(validateNumbers('12345-001-001,3456789-001-001,5678901-001-001')); // false
16console.log(validateNumbers('1234567-001-001/3456789-001-001/5678901-001-001')); // false
正規表現のみで実装
javascript
1function validateNumbers(str) {
2 return /^\d{7}-\d{3}-\d{3}(,\d{7}-\d{3}-\d{3})*,*$/.test(str);
3};
4
5console.log(validateNumbers('1234567-001-001,')); // true
6console.log(validateNumbers('12345-001-001')); // false
7console.log(validateNumbers('1234567-001-001,3456789-001-001,5678901-001-001')); // true
8console.log(validateNumbers('12345-001-001,3456789-001-001,5678901-001-001')); // false
9console.log(validateNumbers('1234567-001-001/3456789-001-001/5678901-001-001')); // false