-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

我假设这些是无效的,因为您的意思是必须有八到十位数字,而不是总长度应该是八到十位。

于 2012-10-05T16:05:55.283 回答