-6

重複の可能性:
php regex、text/htmlから電話番号を抽出

以下の要件があります。電話番号フィールドがあります。

  • その長さは8から10の間でなければなりません
  • _と空白のみを含めることができます
  • 最初と最後の要素は数字である必要があります
  • _と空白は2桁の間にある必要があります

phpを使用して上記のことを検証するための正規表現を書くことはできますか?

有効なエントリの例:231_901 347無効なエントリの例:_123 567、345__123

また、可能であれば、preg_match式を書き留めてください。

これが私が試したコードです:

$subject = "_012_345 69";
$pattern = '/[\d]{1}.[\d\s_]{5,10}.[\d]{1}$/';
$matches = preg_match($pattern, $subject);
echo($matches);

0を返す必要がありますが、1を返します。

4

3 に答える 3

7
^(?=.{8,10}$)\d+(?:[ _]\d+)*$

説明:

^              # Start of string
 (?=.{8,10}$)  # Assert length 8-10
 \d+           # One or more digits
 (?:           # followed by
  [ _]         #  one space or underscore
  \d+          #  one or more digits
 )*            # zero or more times.           
$              # End of string
于 2012-10-05T13:19:01.683 に答える
0

正規表現パターンを使用

^(?=.{8,10}$)(?=\d)(?=.*\d$)(?:\d|(?<=\d)[\s_](?=\d))+$

解説 >>

^

行/文字列の場合に開始

(?=.{8,10}$)

文字列サイズは 8 ~ 10 文字です

(?=\d)

最初の文字は数字

(?=.*\d$)

最後の文字は数字

(?:\d|(?<=\d)[\s_](?=\d))+

許可されている文字は、(a) 数字、または (b) 数字の間の空白またはアンダースコアです

$

行末/文字列

于 2012-10-05T14:23:22.153 に答える
0

私が理解しているように、これはあなたのすべての要件を満たしています。

^(?:\d[ _]*){7,9}\d$

取得している誤検知に関しては、開始アンカー ( ^) を省略しただけです。しかし、アンカーが追加されていても、次のようなものに一致します

1_________2

01234567890123

全体の長さが8から10であるべきではなく、 8から10の数字が必要であることを意味したため、それらは無効であると想定しています。

于 2012-10-05T16:05:55.283 に答える