给定条件的PHP正则表达式
可能重复: 我有以下要求。有一个电话号码字段 它的长度应该在8到10之间 它只能包含u和空格 第一个和最后一个元素应该是数字 _空格应该在两位数之间 我可以用php编写一个正则表达式来验证上述内容吗 有效输入示例:231_901 347 无效条目示例:_123567、345_123 如果可能的话,请写下preg_匹配表达式 以下是我尝试的代码:给定条件的PHP正则表达式,php,regex,Php,Regex,可能重复: 我有以下要求。有一个电话号码字段 它的长度应该在8到10之间 它只能包含u和空格 第一个和最后一个元素应该是数字 _空格应该在两位数之间 我可以用php编写一个正则表达式来验证上述内容吗 有效输入示例:231_901 347 无效条目示例:_123567、345_123 如果可能的话,请写下preg_匹配表达式 以下是我尝试的代码: $subject = "_012_345 69"; $pattern = '/[\d]{1}.[\d\s_]{5,10}.[\d]{1}$/'; $m
$subject = "_012_345 69";
$pattern = '/[\d]{1}.[\d\s_]{5,10}.[\d]{1}$/';
$matches = preg_match($pattern, $subject);
echo($matches);
它应该返回0,但返回1
^(?=.{8,10}$)\d+(?:[ _]\d+)*$
说明:
使用正则表达式模式
^(?=.{8,10}$)(?=\d)(?=.*\d$)(?:\d|(?<=\d)[\s_](?=\d))+$
如果是行/字符串,则开始
(?=.{8,10}$)
字符串大小为8-10个字符
(?=\d)
第一个字符是数字
(?=.*\d$)
(?:\d|(?<=\d)[\s_](?=\d))+
最后一个字符是数字
(?=.*\d$)
(?:\d|(?<=\d)[\s_](?=\d))+
行尾/字符串据我所知,这符合您的所有要求:
(?=.{8,10}$)
^?:\d[\u]*{7,9}\d$
至于你得到的那些误报,你只是离开了开始锚^。但即使添加了锚,它也与以下内容相匹配
1_________2
及
01234567890123
我假设这些是无效的,因为您的意思是必须有8到10个数字,而不是总长度应该是8到10。是的,可以。Jep。验证可以通过php完成。我希望[这篇文章][1]能帮助你。[1] :尝试在此处进行简单搜索。我搜索了电话号码,找到了一些不错的答案。请在OP中说明无效输入的原因。@Gabber:你可能是对的;我误解了他的最后一个要求。@TimPietzcker不再那么肯定了。。。12 23 12 12是10位数字,但其长度为14=>不是很好的匹配。我认为OP的意思是他需要8-10个数字,而不是字符,否则这可能会导致错误的数字数量,从1 2 3 1 5到1234567890 10不等