我会检查字符串是否至少包含:
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
来应用这些条件。看到演示。
$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
表示以非数字开头。
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+$
适用于这种情况
$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.
}