我有以下要求。有一个电话号码字段。
我可以使用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.
答案 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个。