4

正規表現を使用して、次の基準で携帯電話番号を検証しています。

  1. 最大12個の数字。
  2. ゼロで始まる必要があります。
  3. (未定義のポイントで)1つのスペースのみを許可します
  4. #記号を含まない、最大5桁のオプションの内線番号が続きます

私の正規表現は次のようになります:(これを「rubular」テスターでテストしました)

^((0((?=\d* \d*#)[\d ]{,11})(#\d{,5})?)|(0(?:\d{,10})(#\d{,5})?)|(0((?=\d* \d*$)[\d ]{,11})))$

ただし、.net正規表現エンジンでは機能しません。

上記の中で、.net正規表現エンジンで動作しない部分を教えてもらえますか?上記の式で何かを変更できる場合、それは.Net正規表現エンジンで機能しますか?

4

1 に答える 1

2

正規表現の唯一の問題は、開始範囲をどこにも指定していないことです..そうすべき{0,11}かどう{1,11}{,11}


この簡略化された正規表現を使用することもできます

^(?=(\S*[\s]\S*|\S*)$)0(\s?\d){1,11}\s?(#(\s?\d){1,5})?\s?$

\Sスペース以外の任意の文字に一致

(\S*[\s]\S*|\S*)$0 から多くの非スペース文字に一致し、その後にスペースが続き、その後に 0 から多くの非スペース文字が続きます。または、最後まですべての非スペース文字に一致します。

(?=)特定のパターンがpositive lookahead発生するかどうかをチェックし、そうでない場合は一致しません!

于 2012-12-07T11:22:31.103 に答える