Regex to validate passwords with characters restrictions

醉酒当歌 提交于 2019-12-04 01:44:44

问题


I need to validate a password with these rules:

  • 6 to 20 characters
  • Must contain at least one digit;
  • Must contain at least one letter (case insensitive);
  • Can contain the following characters: ! @ # $ % & *

The following expression matches all but the last requirement. What can I do with the last one?

((?=.*\d)(?=.*[A-z]).{6,20})


回答1:


I'm not completely sure I have this right, but since your last requirement is "Can contain the following characters: !@#$%&*" I am assuming that other special characters are not allowed. In other words, the only allowed characters are letters, digits, and the special characters !@#$%&*.

If this is the correct interpretation, the following regex should work:

^((?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20})$

Note that I changed your character class [A-z] to [a-zA-Z], because [A-z] will also include the following characters: [\]^_`

I also added beginning and end of string anchors to make sure you don't get a partial match.




回答2:


^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20}$



回答3:


Regex could be:-

^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9!@#$%&*]{6,20}$

How about this in Javascript:-

function checkPwd(str) {
    if (str.length < 6) {
        return("too_short");
    } else if (str.length > 20) {
        return("too_long");
    } else if (str.search(/\d/) == -1) {
        return("no_num");
    } else if (str.search(/[a-zA-Z]/) == -1) {
        return("no_letter");
    } else if (str.search(/[^a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
        return("bad_char");
    }
    return("ok");
}

Also check out this



来源:https://stackoverflow.com/questions/18623607/regex-to-validate-passwords-with-characters-restrictions

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!