3

これを行う方法を理解するのを手伝ってくれる人はいますか? 私の現在のものは(どこかにあります):

/(\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7)[0-9. -]{4,14})(?:\b|x\d+)/

検出可能: +86-400-660-8680

しかし、これではありません:

  • +1 888 204 3539
  • 1-800-667-6389
  • +1-400-660-8680
  • (877) 359-6695
  • 800-692-7753

これで私を助けてもらえますか?1 つの正規表現は、これらの種類の電話番号をすべて検出できます。または、少なくとも 2 ~ 3 の正規表現を使用してそれらを検出できます。

4

2 に答える 2

6

あなたの正規表現は、国コードが厳密な一連のルールに一致することを確認するために多くの問題を抱えていますが、それに続くものは気にしないようです. これは、次の例がそれに一致することを意味します。

+86-0000
+86----0
+86-1-1-1-1

次の正規表現ははるかに短く、国コードについては厳密ではありませんが、電話番号の全体的な構造については厳密です。

(?:\+?(\d{1,3}))?[- (]*(\d{3})[- )]*(\d{3})[- ]*(\d{4})(?: *x(\d+))?\b

上記の例とは一致せず、次の例と一致します。

18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800 555 1234x5678
8005551234 x5678
1    800    555-5555
1----800----555-5555

これらすべての例で、キャプチャ グループには次の値が含まれます。

  • Group1: 国コード (例: 1 または 86)
  • Group2: 市外局番 (例: 800)
  • Group3: Exchange (例: 555)
  • Group4: 加入者番号 (例: 1234)
  • Group5: 内線番号 (例: 5678)
于 2013-05-19T14:49:04.803 に答える
6

したがって、ニーズに合った巨大な正規表現は次のとおりです。

(+?(?:(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[ 98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)|((?:9 [976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]| 8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)))[0-9. -]{4,14})( ?:\b|x\d+)

オンラインデモ

そして、これが私がそれを作った方法です

于 2013-05-19T10:49:23.930 に答える