创建preg_match以进行密码验证(!@#$%)

问题描述 投票:9回答:9

我想创建一个preg_match函数来验证我的passowrds,但我不知道如何编写它以允许使用以下特殊字符:!@#$%

if(!preg_match(?????)$/', $password))

这是我想要在正则表达式中使用的密码规则:

  • 可能包含字母和数字
  • 必须包含至少1个数字和1个字母
  • 可能包含以下任何字符:!@#$%
  • 必须是8-12个字符

感谢您提供的任何帮助。

php regex passwords preg-match
9个回答
51
投票

我认为这应该是这样的:

if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,12}$/', $password)) {
    echo 'the password does not meet the requirements!';
}

在开始之间 - > ^ 结束 - > $ 字符串必须至少有一个数字 - > (?=.*\d) 并且至少有一封信 - > (?=.*[A-Za-z]) 它必须是数字,字母或以下之一:!@#$% - > [0-9A-Za-z!@#$%] 并且必须有8-12个字符 - > {8,12}

当用户557846对您的问题发表评论时,我还建议您允许更多字符,我通常(如果我使用最大值)至少需要50 :)

顺便说一下,你可能想看看this regex tutorial


9
投票
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[0-9A-Za-z@#\-_$%^&+=§!\?]{8,20}$/',$password)
  • 至少一个小写字母
  • 至少一个大写字母
  • 至少一位数
  • @#-_ $%^&+ =§!的至少一个特殊标志?

2
投票

我喜欢r3bel的答案,所以我玩了它并最终得到以下作为密码检查功能:

function password_strength_check($password, $min_len = 8, $max_len = 70, $req_digit = 1, $req_lower = 1, $req_upper = 1, $req_symbol = 1) {
    // Build regex string depending on requirements for the password
    $regex = '/^';
    if ($req_digit == 1) { $regex .= '(?=.*\d)'; }              // Match at least 1 digit
    if ($req_lower == 1) { $regex .= '(?=.*[a-z])'; }           // Match at least 1 lowercase letter
    if ($req_upper == 1) { $regex .= '(?=.*[A-Z])'; }           // Match at least 1 uppercase letter
    if ($req_symbol == 1) { $regex .= '(?=.*[^a-zA-Z\d])'; }    // Match at least 1 character that is none of the above
    $regex .= '.{' . $min_len . ',' . $max_len . '}$/';

    if(preg_match($regex, $password)) {
        return TRUE;
    } else {
        return FALSE;
    }
}

最大/最小长度是默认或可调整的,每个要求都是默认开启,但可以关闭,我想支持任何符号,所以最后一个要求是“任何不属于上述类型的东西”,而不是固定的一组符号。


1
投票

我已经开发了一个完整的正则表达式来进行更复杂的检查

/^(?=.*\d)(?=.*[A-Za-z])(?=.*[A-Z])(?=.*[a-z])(?=.*[ !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"]{8,50}$/

基本上我检查密码有1位数,1个大写,1个低位和1个特殊字符。我希望这有助于寻找正则表达式的人。


0
投票

我在hook_form_validate用我的drupal自定义表单完成了这个,密码应该是6个字母,数字和至少一个特殊字符。

<?
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$%])[0-9A-Za-z!@#$%]{6,15}$/', $form_state['values']['pass'])) {
    form_set_error('pass', t('Password must contain 6 characters of letters, numbers and at least one special character.'));
}
?>

0
投票
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$%])[0-9A-Za-z!@#$%]
{6,15}$/',($_POST['password']))) {
    $message='Password must contain 6 characters of letters, numbers and 
    at least one special character.';
}

0
投票

一种不同的方式

让我们看一下,我相信用户可以在密码中使用所有ASCII有效字符(32 < ascii_code < 127)并创建一个函数来检查ASCII表中的所有字符!

function check($pass, $i = 0){
     if(strlen($pass) > $i)
         return (0rd(pass[$i]) > 32 and 0rd(pass[$i]) < 127) and check($pass, $i + 1);
}

用法

if(!check($_POST["password"])){
    echo "password is wrong";
}

-1
投票

查找字符类,正则表达式的基本功能。


-1
投票
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,12}$/', $password)) {
    echo 'the password does not meet the requirements!';
    }

在上面的陈述中......因此存在什么可能的密码?

© www.soinside.com 2019 - 2024. All rights reserved.