PHP (Regex)检查字符串是否至少包含4个数字+ 2个字母


PHP (Regex) Check if a string contains at least 4 digits + 2 letters

我会检查字符串是否至少包含:

2个字母(a-z)不区分大小写4位数字(0-9)

顺序不重要。它可以是 a1234b , 这样的, 4444 aa 等等。

实际的正则表达式是

if (preg_match("/[a-z][^a-z]*[a-z]*[0-9]/i",$string)) {
echo 'secure';
$continue = true;
}
如果字符串以数字开头,

和it 不起的作用。谢谢你

^(?=(?:.*[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);

你可以像这样使用一个人类可读的检查:

  • 删除所有非字母('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函数。

你可以试试这个模式('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-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.
}