簡體   English   中英

無效的轉義序列 \d

[英]Invalid escape sequence \d

我正在嘗試檢查密碼是否至少包含一個小寫字母、一個大寫字母、一個數字和一個特殊字符。

我正在嘗試這個:

if(!password.matches("(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])")){
        username = "Error";
    }

但給我一個錯誤說:無效的轉義序列。

有人可以幫我解決問題並確認這是正確的模式嗎?

謝謝,whit \\d 不會出錯,但它與 Paul%88 這樣的字符串不匹配,為什么?

Java 會將字符串中的\視為開始轉義序列 確保你使用\\代替(這樣你就可以在字符串中得到一個實際的\字符),你應該沒問題。

快速更新:正如 Etienne 指出的那樣,如果你真的想要 RegEx 本身中的\ ,你需要使用\\\\ ,因為這將在字符串中產生\\ ,這將在 RegEx 中產生\

新問題更新:您提到您的 RegEx 不起作用,我很確定那是因為它是錯誤的。 如果您只想確保存在每種類型的字符 class 之一,您可能只想為每個 class 創建一個 RegEx,然后對照每個字符檢查密碼。 密碼幾乎可以保證很短(您實際上可以自己控制),因此性能命中應該是最小的。

我用它來快速測試它: http://www.regexplanet.com/simple/index.html

如果你把。*放在最后,看起來它會起作用。 我想您實際上還需要包含一個非前瞻正則表達式。

這是整個正則表達式:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*

當然,在您的 java 代碼中,您必須如前所述轉義反斜杠。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM