繁体   English   中英

PHP(正则表达式)检查字符串是否包含至少4位数字+ 2个字母

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

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

2个字母(az)区分大小写的4位数字(0-9)

顺序并不重要。 它可以被a1234b,ABCD1234,4444aa等等等等。

我实际的正则表达式是

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

如果字符串以数字开头,则该功能不起作用 谢谢

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

请注意,要计算Unicode字符串的长度,您需要mb_strlen函数。

您可以尝试使用此模式(\\b[a-zA-Z]+\\d{4}[az]?|\\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.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM