簡體   English   中英

檢查字符串是否沒有6位數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM