工作嘗試其他的變化後,我可以在Java這個正則表達式來驗證密碼:正則表達式特殊字符不能在字符串的開頭在Java
PatternCompiler compiler = new Perl5Compiler();
PatternMatcher matcher = new Perl5Matcher();
pattern = compiler.compile("^(?=.*?[a-zA-Z])(?![\\\\\\\\_\-])(?=.*?[0-9])([A-Za-z0-9-/-~]
[^\\\\\\\\_\-]*)$");
但它仍然不符合我的測試如預期的情況:
[email protected]
比賽
[email protected]
不匹配,但它應該匹配
[email protected]
不匹配,但它應該匹配
!#ap#2017
不匹配,但它應該匹配
[email protected]
它不應該匹配
[email protected]
它不應該匹配
\[email protected]
它不應該匹配
除了三個特殊字符-
_
\
剩下的,都應該匹配在的開始串。
規則:
應該接受所有的特殊字符,除了上述三個符號任意次數。
它必須和應該包含一個數字和大寫字母在字符串中的任何位置。
好吧,請嘗試['^(?=。*?[a-zA-Z])(?=。*?[0-9])[^ \\\\ _-] * $'](https://regex101.com/r/cmut9v/3)。請提供問題中的規則。 –
您能否通過在字符串的開頭加入特殊字符來表達與我的相同的表達方式?整個表達式的改變並不是在生產環境中的良好做法 – Kiran
用'(?:[A-Za-z0-9 -/- 〜] | []替換'[A-Za-z0-9 -/- 〜]^\\ w \\\\ - ])'然後。但''[^ \\\\\ _ _ - - ]'看起來太複雜了,它一定是'[^ \\\\ _-]'。請注意,'/ - 〜'匹配的不只是3個符號,因爲它是從'/'到'〜'的*範圍。 –