检查字符串是否没有6位数字

时间:2018-10-05 06:46:17

标签: php regex

我正在尝试检查字符串是否没有任何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

5 个答案:

答案 0 :(得分:2)

在使用preg_match时检查\d{6}的结果是否为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-不要使用字符集)

答案 1 :(得分:2)

不要试图在正则表达式中说“ not this”,而要在PHP中表达它:

if ( preg_match( '/([0-9]{6})/', $myString ) !== 1) {
    echo 'If'; 
} else {
    echo 'Else';
}

您当前的正则表达式/([^0-9]{6})/的意思是“ 6个非数字字符”,而不是“不包含6个数字”。

答案 2 :(得分:0)

if (preg_match('/[0-9]\d{5}/',$myString)) {
    echo 'If';
}else{
    echo 'else';
}

答案 3 :(得分:0)

您的表达式匹配具有6个连续的非数字字符的任何字符串。您需要将字符串与6位数字匹配,然后将结果取反:

if ( ! preg_match('/([0-9]{6})/', $myString)) {
    ...
}

答案 4 :(得分:0)

您可以用(?<!\d)\d{6}(?!\d)模式匹配6位数字。

您可以在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 demo

模式详细信息

  • ^-字符串的开头
  • (?!.*(?<!\d)\d{6}(?!\d))-否定的超前查询,如果存在匹配项,则匹配失败
    • .*-尽可能多的0个字符(s修饰符使.匹配任何字符)
    • (?<!\d)\d{6}(?!\d)-6个数字,均不得在数字前后加上数字。