[英]Check if string does not have 6 digit number
我正在尝试检查字符串是否没有任何6位数字。
$myString = "https://www.website.net/sometext/123456/";
if ( preg_match( '/([^0-9]{6})/', $myString ) ) {
echo 'If';
} else {
echo 'Else';
}
上面的代码回显if
为假。 我不确定我缺少什么。
这是我想要达到的目标:
"https://www.website.net/sometext/123456/" -> false
"https://www.website.net/sometext/" -> true
"https://www.website.net/" -> true
使用\\d{6}
,请检查preg_match
的结果是否为0:
if ( preg_match( '/\d{6}/', $myString ) === 0) {
echo 'If';
} else {
echo 'Else';
}
或者,如果您希望preg_match
如果字符串不包含任何这样的数字,则返回1
,则从字符串的开头到结尾重复每个字符,同时对6个字符使用负前瞻:
if ( preg_match( '/^(?:.(?!\d{6}))+$/', $myString )) {
echo 'If';
} else {
echo 'Else';
}
还要注意, [^0-9]
意思是“除了数字以外的任何东西”,但是可以只与\\D
元字符匹配。 (类似地,要匹配数字或[0-9]
,请使用\\d
请勿使用字符集)
与其尝试在正则表达式中说“ not this”,不如在PHP中表达它:
if ( preg_match( '/([0-9]{6})/', $myString ) !== 1) {
echo 'If';
} else {
echo 'Else';
}
您当前的正则表达式/([^0-9]{6})/
意思是“ 6个非数字字符”,而不是“不包含6个数字”。
if (preg_match('/[0-9]\d{5}/',$myString)) {
echo 'If';
}else{
echo 'else';
}
您的表达式匹配具有6个连续的非数字字符的任何字符串。 您需要将字符串与6位数字匹配,然后将结果取反:
if ( ! preg_match('/([0-9]{6})/', $myString)) {
...
}
您可以将6位数字与(?<!\\d)\\d{6}(?!\\d)
模式匹配。
您可以在preg_match
调用中使用它并取反结果:
if (!preg_match('~(?<!\d)\d{6}(?!\d)~', "text1234567 more text")) {
echo "Does not contain a 6 digit number";
}
或者,您可以将其添加到否定前瞻中,并使用preg_match
不加取反:
if (preg_match('~^(?!.*(?<!\d)\d{6}(?!\d))~s', "text1234567 more text")) {
echo "Does not contain a 6 digit number";
}
参见PHP演示 。
图案细节
^
-字符串开头 (?!.*(?<!\\d)\\d{6}(?!\\d))
-如果匹配项为,则负前瞻将使匹配失败
.*
-尽可能多的0个字符( s
修饰符使.
匹配任何字符) (?<!\\d)\\d{6}(?!\\d)
-6个数字,均不得在数字前或后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.