正規表現のgフラグ
「初めの一つしかマッチしない」のは正規表現リテラルでgフラグを付けていないからです。
国内の電話番号フォーマット
総務省に国内の電話番号書式の説明があります。
JavaScript
1function findTelNumberAll (string) {
2 var tel = string.match(/0(?:\d[(-]?\d{4}|(?![789]0)\d{2}[(-]?\d{3}|\d{3}[(-]?\d{2}|\d{4}[(-]?\d|[789]0[(-]?\d{4})[)-]?\d{4}(?!\d)/g);
3
4 return tel ? tel : [];
5}
6
7var targetString = ['<tag>東京都千代田何処其処1-2-12</tag>',
8 '<tag>0120-111-2222</tag>', // 誤
9 '<tag>03(4444)5555</tag>', // 正
10 '<tag>0120-12-4567</tag>', // 正
11 '<tag>045-987-6543</tag>', // 正
12 '<tag>01234-5-6789</tag>', // 正
13 '<tag>070-1111-2222</tag>', // 正
14 '<tag>080-1111-2222</tag>', // 正
15 '<tag>090-1111-2222</tag>', // 正
16 '<tag>090-111-2222</tag>', // 誤
17 '<tag>なにがしか</tag>'].join();
18
19console.log(JSON.stringify(findTelNumberAll(targetString))); // ["03(4444)5555","0120-12-4567","045-987-6543","01234-5-6789","070-1111-2222","080-1111-2222","090-1111-2222"]
0120-111-2222
「0120-111-2222」は11桁の番号の為、日本国内の電話番号ではありません。
また、質問文のコードを適用すると、末尾2桁の数字が欠けます。
JavaScript
1console.log(/[0-9()-]{10,11}/.exec('0120-111-2222')[0]);
更新履歴
- 2017/04/25 13:54 携帯電話番号の書式に対応
Re: KenKimura さん
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/25 09:58