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

PHP(正则表达式)检查字符串是否至少包含4位数字+;2封信,php,regex,Php,Regex,如果字符串至少包含,我将检查该字符串: 2个字母(a-z)不区分大小写 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+

如果字符串至少包含,我将检查该字符串:

2个字母(a-z)不区分大小写 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
来应用这些条件。请参阅演示


您可以像这样使用人类可读的检查:

  • 删除所有非字母(
    \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";
    }
}
if(preg匹配('/^\D/',$str)){
如果(mb_strlen(preg_replace(“/\D/”,“$str),“UTF8”)<4|
mb_strlen(preg_replace('/[\P{L}\P{M}]/u','$str','UTF8')<2){
回声“无效”;
}
其他的
{
回声“有效”;
}
}


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

您可以尝试这种模式
(\b[a-zA-Z]+\d{4}[a-Z]?\b[a-zA-Z]+\d{4}[a-zA-Z]+)

请看这里的演示

输入

a1234b、ABCD1234444AA、33333、ab555、aac3566

输出

a1234b、abcd1234、4444aa、aac3566适用于这种情况

对于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.
}
“顺序不重要”--这一要求使得
regex
不是任务的最合适工具。使用
regex
验证字符串是否只包含字母和数字,然后计算数字(和/或字母)并检查每种类型是否足够。
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.
}