给定条件的PHP正则表达式

时间:2012-10-05 13:14:40

标签: php regex

  

可能重复:
  php regex , extract phone number from 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.

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用正则表达式

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

说明&gt;&gt;

^

开始行/字符串

(?=.{8,10}$)

字符串大小为8-10个字符

(?=\d)

第一个字符是数字

(?=.*\d$)

最后一个字符是数字

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

允许的字符是(a)数字或(b)数字之间的空格或下划线

$

行尾/字符串

答案 2 :(得分:0)

根据我的理解,这符合您的所有要求:

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

至于你得到的那些误报,你刚刚离开了起始锚(^)。但即使添加了锚,也会匹配

之类的内容
1_________2

01234567890123

我认为这些是无效的,因为你的意思是必须有8到10个数字,而不是总长度应该是8到10个。