Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给定条件的PHP正则表达式_Php_Regex - Fatal编程技术网

给定条件的PHP正则表达式

给定条件的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

可能重复:

我有以下要求。有一个电话号码字段

它的长度应该在8到10之间 它只能包含u和空格 第一个和最后一个元素应该是数字 _空格应该在两位数之间 我可以用php编写一个正则表达式来验证上述内容吗

有效输入示例:231_901 347 无效条目示例:_123567、345_123

如果可能的话,请写下preg_匹配表达式

以下是我尝试的代码:

$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不等