簡體   English   中英

Java 正則表達式數據庫和特殊字符

[英]Java regex db and special character

我從未記錄的 java 代碼繼承。 似乎我有一個數據庫,其中包含這樣的代碼 050.09.89 和 java 后端代碼中的正則表達式測試。

使用對應於數據庫表 getCode.matches() 的 object 現在我必須更改正則表達式以匹配兩種代碼 050.09.89 或 050/09/89 但是當它是 050/09/89 時我有 500 個內部錯誤,我認為這是由於數據庫只包含 050.09.89 類型的代碼。

問題來自正則表達式還是數據庫上下文? 以及如何在不更改數據庫的情況下解決問題? 此致

private void checkNotifyAllowed(Deployment deployment) {

if (!deployment.getCode().matches(regex:"[0-9]{3}\\/[0-9]{2}\\/[0-9]{2}$|[0-9]{3}\\.[0-9]{2}\\.[0-9]{2}$")){

throw new BusinessException("Invalid billing code, should be nnn.nn.nn or nnn/nn/nn");
}}

現在我必須更改正則表達式以匹配兩種代碼 050.09.89 或 050/09/89 但是當它是 050/09/89 時我有 500 個內部錯誤,我認為這是由於數據庫只包含 050.09.89 類型代碼。

您共享的代碼塊中的正則表達式實際上已經構建,因此它接受格式XXX/XX/XX以及YYY.YY.YY - pipe 字符| 中間將兩種可能性分開。 那里的\\用於轉義特殊字符。 我認為/根本不需要轉義,不像. 這是正則表達式中的特殊字符,必須進行轉義,以便匹配文字點字符而不是任何單個字符。 就像 Wiktor 建議的那樣:將\\/替換為/

但是,500 內部錯誤也可能指向其他問題,因為/也是一種特殊字符。 也許它混淆了 web 服務器,因為例如通過帶有/字符的 GET 請求的輸入參數被視為子目錄訪問請求。 如果可能,請檢查有關此問題的 web 服務器日志。

暫無
暫無

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

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