2015-09-21 53 views
1

如果包含至少我會檢查的字符串:PHP(正則表達式)檢查是否字符串包含至少4位+ 2個字母

2個字母(AZ)不區分大小寫 4位數字(0-9)

順序並不重要。這可能是a1234bABCD12344444aa等等等等

我的實際正則表達式是

if (preg_match("/[a-z][^a-z]*[a-z]*[0-9]/i",$string)) { 
echo 'secure'; 
$continue = true; 
} 

,它功能,如果字符串以數字開頭。謝謝

+0

* 「的順序並不重要。」 * - - 這個要求使得'regex'不是最適合該任務的工具。使用'regex'來驗證字符串是否只包含字母和數字,然後計算數字(和/或字母)並檢查每種類型是否足夠。 – axiac

回答

4
^(?=(?:.*[a-zA-Z]){2})(?=(?:.*[0-9]){4})\w+$ 

您可以在這裏使用lookahead來應用條件。

https://regex101.com/r/vV1wW6/22

$re = "/^(?=(?:.*[a-zA-Z]){2})(?=(?:.*[0-9]){4})\\w+$/m"; 
$str = "a1234b\nabcd1234\n4444aa\n12\n12a\n12aa22"; 

preg_match_all($re, $str, $matches); 
0

您可以使用一個人類可讀的檢查是這樣的:

  • 刪除所有非字母(\P{L}信件和\P{M}非變音符號),如果生成的字符串長度小於2,返回false
  • 刪除所有非數字(\D),如果結果字符串長度小於4,則返回false。

至於

如果字符串以數字開頭

您可以添加它不起作用的if (preg_match('/^\D/', $str))其中^\D意味着開始與非數字

PHP代碼:

if (preg_match('/^\D/', $str)) { 
    if (mb_strlen(preg_replace('/\D/', '', $str), 'UTF8') < 4 || 
     mb_strlen(preg_replace('/[\P{L}\P{M}]/u', '', $str), 'UTF8') < 2) { 
     echo "Invalid"; 
    } 
    else 
    { 
     echo "Valid"; 
    } 
} 

IDEONE demo

注意,要算一個Unicode字符串的長度,你需要mb_strlen功能。

0

你可以試試這個模式(\b[a-zA-Z]+\d{4}[a-z]?|\b[a-zA-Z]+\d{4}|\b\d{4}[a-zA-Z]+)

觀看演示這裏https://regex101.com/r/uJ0vD4/8

輸入

a1234b,ABCD1234,4444aa,33333,ab555,aac3566

輸出

a1234b,ABCD1234,4444aa,aac3566

0

^(?=(?:.*[0-9]){4})\w+$作品這種情況下

爲PHP:

$re = "/^(?=(?:.*[0-9]){4})\\w+$/m"; 
$str = "a1234b\naaa32233\n"; 

preg_match_all($re, $str, $matches); 

爲JavaScript:

var re = /^(?=(?:.*[0-9]){4})\w+$/gm; 
var str = 'a1234b\naaa32233\n'; 
var m; 

while ((m = re.exec(str)) !== null) { 
    if (m.index === re.lastIndex) { 
     re.lastIndex++; 
    } 
    // View your result using the m-variable. 
    // eg m[0] etc. 
} 
相關問題