我无法找出以下密码条件的正确正则表达式:
至少 2 个或多个大写字母、2 个或多个小写字母、2 个或多个数字、1 个或多个特殊字符。
(?!^[0-9]*[A-Z][0-9]*$)
(?!^[0-9]*[a-z][0-9]*$)
(?!^[a-zA-Z]*[0-9][a-zA-Z]*$)
我试过这个,但如果字符不连续,它不匹配:
^([a-z]{2,})$
^([A-Z]{2,})$
^([0-9]{2,})$
谢谢你的帮助。
我无法找出以下密码条件的正确正则表达式:
至少 2 个或多个大写字母、2 个或多个小写字母、2 个或多个数字、1 个或多个特殊字符。
(?!^[0-9]*[A-Z][0-9]*$)
(?!^[0-9]*[a-z][0-9]*$)
(?!^[a-zA-Z]*[0-9][a-zA-Z]*$)
我试过这个,但如果字符不连续,它不匹配:
^([a-z]{2,})$
^([A-Z]{2,})$
^([0-9]{2,})$
谢谢你的帮助。
尝试:
([a-z].*[a-z])
([A-Z].*[A-Z])
([0-9].*[0-9])
请注意,在这种情况下不需要^
and 。$
如果您需要三个或更多字符,这将不会很好,因为它会开始变得非常低效。但是对于两个或更多,它应该可以正常工作。
如果您使用正则表达式的任何语言都允许前瞻:
^(?=.*[a-z].*[a-z])(?=.*[A-Z].*[A-Z])(?=.*[0-9].*[0-9)(?=.*[SPECIAL CHARACTERS])
如果您想添加最小和/或最大长度,只需附加.{min,max}$
到正则表达式。事实上,可以附加任何其他验证,因为此方法在初始匹配两个小写字母、两个大写字母、两个数字和 1 个特殊字符后不消耗字符
我只想把它扔在那里,虽然在技术上可以使用单个正则表达式并且没有条件来验证它,但从用户体验的角度来看,这样做并不是特别有用。你最好告诉用户一些比“你的密码失败”更有用的东西。由于您没有指定您使用的语言,我将使用 php 演示一种更有用的方法:
这是一个示例脚本,它将根据您的要求吐出更详细的错误消息。
<?php
if ($_POST['password']) {
$password = $_POST['password'];
preg_match_all('~([a-z])|([A-Z])|([0-9])|(\W)~',$password,$parts);
$lowerAlpha = array_filter($parts[1]);
$upperAlpha = array_filter($parts[2]);
$numbers = array_filter($parts[3]);
$special = array_filter($parts[4]);
$errors = array();
if (count($lowerAlpha)<2) $errors[] = 'at least 2 lowercase letters required';
if (count($upperAlpha)<2) $errors[] = 'at least 2 uppercase letters required';
if (count($numbers)<2) $errors[] = 'at least 2 numbers required';
if (count($special)<1) $errors[] = 'at least one special character required';
if (count($errors)==0) {
// password is great, do something!
} else {
echo "password didn't make the cut for the following reasons:<br/>";
echo "<pre>";
print_r($errors);
echo "</pre>";
}
}
if (!isset($password)) $password = '';
?>
<form action='' method='post'>
<input type='text' name='password' value='<?php echo $password; ?>'>
<input type='submit' value='verify'>
</form>