回答
這應做到:
(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z]).{8,}
在這裏看到:rubular
解釋:
(?=.*?[a-z]) //lookahead, there has to be a lower case alphabetic char
(?=.*?[A-Z]) //lookahead, there has to be a upper case alphabetic char
(?=.*?[^a-zA-Z]) //lookahead, there has to be a non-alphabetic char
.{8,} // any character at least 8 times
哪一組元素指定特殊租船人在這裏? – 2011-05-17 12:19:22
[^ a-zA-Z]表示除字母字符以外的任何內容。 – morja 2011-05-17 12:35:58
不要試圖對所有規則使用一個正則表達式 - 這很難,而且更重要的是它很難被未來的程序員閱讀和修改。相反,爲每個規則寫一個函數。對第一條規則使用字符串長度函數,然後對大寫字母,小寫字母和數字使用單獨的正則表達式(或對字符串的簡單掃描)。
那麼你的測試變得像:
if (len(password) >= 8 &&
contains_lower(password) &&
contains_upper(password) &&
contains_number(password)) {
...
}
您的代碼成爲其意圖非常清楚,如果你要改變只有一種算法,你不必重新發明一個複雜的正則表達式。另外,您可以單獨測試每個規則。
與此相比,一個例子有人在另一個答案寫了這個問題:
(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z]).{8,}
這兩個答案看起來更容易理解,更容易修改,更容易測試?你甚至無法猜測正則表達式在做什麼,直到你花費了幾個(或許多)時間來研究它。如果需求變爲「..並且至少有一個下劃線」會怎麼樣?你如何改變這種模式,尤其是當你不是一開始就想出這種模式的人時?
+1奇妙 - 我不知道爲什麼我沒有想到10000000x之前更清晰! – Dori 2013-02-26 12:41:06
不使用正則表達式的另一個重要原因是它們使得不可能告訴用戶哪些部分的需求是他的密碼不符合 – 2016-08-12 09:49:59
- 1. 正則表達式上下+號或其他非字母
- 2. 正則表達式:允許使用字母,數字和空格(至少包含一個字母而非數字)
- 3. 正則表達式必須包含至少一個數字和字母嗎?
- 4. 正則表達式的C包含至少一個數字,字母
- 5. 包含至少一個非數字字符的字母數字正則表達式
- 6. 正則表達式爲無字母,至少有1個數字
- 7. 字段的正則表達式必須包含至少2個非空格字母數字字符
- 8. 正則表達式的「密碼必須包含至少一個非字母數字字符」
- 9. 正則表達式的至少一個上,下和數字
- 10. 正則表達式必須至少有3個字母字符
- 11. 正則表達式檢查字符串是否包含至少一個字母或數字
- 12. 包含至少一個數字的字符串的正則表達式
- 13. 正則表達式二進制字符串至少包含
- 14. 正則表達式接受至少一個字母字符和數字字符
- 15. 只有一個字符(*)或其他字母數字的正則表達式
- 16. 正則表達式以匹配至少包含一個數字的字母數字值
- 17. 正則表達式來搜索每行至少2個字母
- 18. 正則表達式的字母數字,但至少有一個字符
- 19. 正則表達式只允許字母,數字和至少兩個字符
- 20. 正則表達式的字母,至少1個數字和特殊字符
- 21. 正則表達式匹配包含非字母數字字符的單詞
- 22. 正則表達式PHP與密碼長度爲8,至少有一個大寫字母,數字nd字母
- 23. 正則表達式,至少有1個字母和1個數字
- 24. 正則表達式匹配只包含字母和數字的字母數字
- 25. 正則表達式:去除非字母數字或標點
- 26. 驗證正則表達式必須包含字母數字
- 27. 正則表達式包含字母,數字和_
- 28. 至少x個數字字符的javascript正則表達式
- 29. 正則表達式密碼必須包含字母,至少包含一個特殊字符和至少一個數字?
- 30. 正則表達式匹配至少一個字符或空格
你必須使用正則表達式嗎?我沒有任何反對,但對於標準1,可能更容易使用字符串長度函數。這是什麼語言? – chillysapien 2011-05-17 10:03:23
這不是你的問題的答案,但我想推薦一些閱讀,瞭解爲什麼強迫用戶輸入你正在檢查的密碼是一種不好的做法:http://www.baekdal.com/tips/password-安全性 - 可用性 – 2011-05-17 10:04:04
[RegEx表達式驗證輸入字符串]的可能重複(http://stackoverflow.com/questions/1124796/regex-expression-to-validate-the-input-string) – 2011-05-17 11:18:54