0

これらの電話番号形式を検証したい:

517123123
+48517123123
+48 517 123 123

(48)517123123
(48)517 123 123

517-123-123
48 517-123-123
48/517-123-123

48 517 123 123

私はこの正規表現を書きました: (\+?)+(((\(([0-9]+){2,2}\)))|(([0-9]+){2,2})?)+(\/?)+(\s?)+(([0-9]+){9,9}|([0-9]+){3,3}(\s|-){1,1}([0-9]+){3,3}(\s|-){1,1}([0-9]+){3,3})

問題は、それが8978978979878978967有効なように大きな数を作ることです。私の間違いはどこにありますか?

4

3 に答える 3

2

正規表現の終わりを見ると、複数の場所で実行しているように見えることがあります。

([0-9]+){3,3}

+、[0-9]の少なくとも1回の繰り返しを示します。これは1111111111111、完全に有効な一致になります。次に、それらの一致のうち正確に3つに制限しますが、それでも非常に長い数になる可能性があります。正確に3桁にする場合は、を削除し+ます。

于 2013-01-27T18:44:48.423 に答える
1

現時点では、正規表現が何をしているのかわかりません。余分なものが多すぎます。

  1. グループが多すぎます

  2. オプションのキャラクターを繰り返したい!?

    例えば:

    • (\+?)+、あなたは周りにグループを必要とせず、あなたはそれを繰り返したくないので、\+?あなたがここに望むものです。

    • (\s?)+、「0個以上の空白」と言いたいですか?次に\s*、必要なものです。

  3. たとえば、を書くとき{9,9}、あなたは1桁を削除することができます{9}、同じです。

  4. あなたは数量詞を入れ子にしています、それはあなたがあまりにも多くの文字を許可する場所です。複数の場所がありますが([0-9]+){9,9}、これは1桁以上を意味し、それを9回繰り返します。

于 2013-01-27T18:50:20.047 に答える
1

あなたはアンカーを失ったかもしれません....しかし、私の正規表現を使用してください^(\+?(\(\d{2}\)|(\d{2})|(\d{2}[/ ])))?((\d{3} \d{3} \d{3})|(\d{3}-\d{3}-\d{3})|(\d{9}))$

于 2013-01-27T18:51:15.123 に答える