如果包含至少:
,我会检查一个字符串2个字母(a-z)CASE INSENSITIVE 4位数(0-9)
订单并不重要。它可能 a1234b , abcd1234 , 4444aa 等等。
我的实际正则表达式是
if (preg_match("/[a-z][^a-z]*[a-z]*[0-9]/i",$string)) {
echo 'secure';
$continue = true;
}
如果字符串以数字开头,则不。谢谢
答案 0 :(得分: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);
答案 1 :(得分: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
函数。
答案 2 :(得分: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
答案 3 :(得分:0)
^(?=(?:.*[0-9]){4})\w+$
适用于此案例
for PHP:
$re = "/^(?=(?:.*[0-9]){4})\\w+$/m";
$str = "a1234b\naaa32233\n";
preg_match_all($re, $str, $matches);
for 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.
}