一文詳解密碼的正則表達(dá)式寫法
密碼的正則表達(dá)式如何來寫?
正則表達(dá)式:密碼必須至少包含八個(gè)字符、至少包含一個(gè)數(shù)字、小寫和大寫的字母以及特殊字符
我需要一個(gè)正則表達(dá)式來檢查密碼:
密碼至少包含八個(gè)字符、至少包含一個(gè)數(shù)字、同時(shí)包含小寫字母和大寫字母以及特殊字符,例如#,?,!)
不能是舊密碼或包含用戶名,"password"或"websitename"
這里是我的驗(yàn)證表達(dá)式,用于限制:八個(gè)字符,包括一個(gè)大寫字母,一個(gè)小寫字母和一個(gè)數(shù)字或特殊字符。
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"
那么,如何寫一個(gè)正則,限制密碼必須是八個(gè)字符,包括一個(gè)大寫字母,一個(gè)特殊字符和字母數(shù)字字符?
最佳解決思路
至少八個(gè)字符,至少一個(gè)字母和一個(gè)數(shù)字:
"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"
至少八個(gè)字符,至少一個(gè)字母,一個(gè)數(shù)字和一個(gè)特殊字符:
"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$"
最少八個(gè)字符,至少一個(gè)大寫字母,一個(gè)小寫字母和一個(gè)數(shù)字:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"
至少八個(gè)字符,至少一個(gè)大寫字母,一個(gè)小寫字母,一個(gè)數(shù)字和一個(gè)特殊字符:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}"
最少八個(gè)最多十個(gè)字符,至少一個(gè)大寫字母,一個(gè)小寫字母,一個(gè)數(shù)字和一個(gè)特殊字符:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,10}"
次佳解決思路
可以使用這個(gè)正則表達(dá)式:
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
這個(gè)正則表達(dá)式將強(qiáng)制執(zhí)行這些規(guī)則:
至少一個(gè)大寫字母English letter,
(?=.*?[A-Z])至少一個(gè)小寫英文字母,
(?=.*?[a-z])至少有一位數(shù)字,
(?=.*?[0-9])至少有一個(gè)特殊字符,
(?=.*?[#?!@$%^&*-])最小八個(gè)長度
.{8,}(帶錨)
第三種解決思路
正則表達(dá)式?jīng)]有AND運(yùn)算符,所以編寫匹配有效的密碼的正則表達(dá)式相當(dāng)困難,特別是當(dāng)有效性被某些東西AND別的東西等定義時(shí)...
但是,正則表達(dá)式確實(shí)有一個(gè)OR運(yùn)算符,所以只需應(yīng)用DeMorgan的定理,并編寫一個(gè)與無效密碼相匹配的正則表達(dá)式:
任何少于八個(gè)字符或任何沒有數(shù)字或任何沒有大寫字母或任何沒有小寫字母或任何沒有特殊字符的任何字符串。
所以:
^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$
如果能匹配上這個(gè)正則表達(dá)式的話,這是一個(gè)無效的密碼。
第四種思路
對最佳答案的一個(gè)小小的改進(jìn):由于特殊字符僅限于鍵盤中的特殊字符,因此可用于表達(dá)任何特殊字符:
^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$
這個(gè)正則表達(dá)式將強(qiáng)制執(zhí)行這些規(guī)則:
至少一個(gè)大寫英文字母
至少一個(gè)小寫英文字母
至少一位數(shù)字
至少一個(gè)特殊字符
最少八個(gè)字符
第五種思路
在我的環(huán)境中,按照最佳答案來做,我遇到了一些困難。例如,對字符如;或[驗(yàn)證失敗。我不想白名單列舉我的特殊字符,所以我用[^\w\s]作為測試 - 只是放置匹配非字符(包括數(shù)字)和非空格字符??偠灾?,這個(gè)做法對我來說比較有效...
至少
8字符至少
1數(shù)字字符至少
1小寫字母至少
1大寫字母至少
1特殊字符
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/
第六種思路
導(dǎo)入JavaScript文件jquery.validate.min.js。
就可以使用如下方法:
$.validator.addMethod("pwcheck", function (value) {
return /[\@\#\$\%\^\&\* \_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
這個(gè)正則表達(dá)式可以表達(dá):
至少一張大寫英文字母
至少一個(gè)小寫英文字母
至少一位數(shù)字
至少一個(gè)特殊字符
第七種思路
滿足如下條件:
最少六個(gè)字符
至少有一個(gè)大寫字符
至少一個(gè)小寫字符
至少一個(gè)特殊字符
正則表達(dá)式:
"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"
滿足如下條件,且有可選特殊字符:
至少一個(gè)特殊字符
至少一個(gè)數(shù)字
特殊字符是可選的
最少6個(gè)字符,最多16個(gè)字符
正則表達(dá)式:
"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"
如果不需要最小和最大條件,可以刪除.{6, 16}
6是最小字符數(shù)限制
20是最大字符限制
?=表示匹配表達(dá)式
第八種思路
需要滿足的條件,以及對應(yīng)的正則表達(dá)式:
Conditions: 1] Min 1 uppercase letter.
2] Min 1 lowercase letter.
3] Min 1 special character.
4] Min 1 number.
5] Min 8 characters.
6] Max 30 characters.
Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/
第九種思路
根據(jù)你的需要,下面這個(gè)正則表達(dá)式應(yīng)該能正常工作的:
^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}
只需創(chuàng)建一個(gè)字符串變量,分配模式,并創(chuàng)建一個(gè)布爾方法,如果模式匹配正確則返回true,否則返回false。
示例:
String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"
private boolean isValidPassword(String password_string) {
return password_string.matches(Constants.passwordPattern);
}
第十種思路
試試這個(gè)正則表達(dá)式:
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$
這個(gè)正則表達(dá)式對我來說非常完美。
function myFunction() {
var str = "c1TTTTaTTT@";
var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
var res = patt.test(str);
console.log("Is regular matches:", res);
}以上就是一文詳解密碼的正則表達(dá)式寫法的詳細(xì)內(nèi)容,更多關(guān)于密碼正則表達(dá)式寫法的資料請關(guān)注腳本之家其它相關(guān)文章!

