3 回答
TA貢獻1868條經驗 獲得超4個贊
您可以使用java 中的Pattern類并使用它的matches方法,該方法接受兩個參數,第一個是您提到的正則表達式,第二個參數是一個字符串,它返回一個boolean值,該值將告訴字符串是否與正則表達式匹配。這是相同的示例代碼,
String input = "somedata";
Pattern.matches("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$", input);
你的方法應該是這樣的,
public void setSocNum(String x) {
if (Pattern.matches("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$", x)) {
System.out.println("please enter a valid social security number");
}
// further logic goes here
}
對象的創建Pattern很繁重,因此如果您打算使用多次調用它的代碼,您應該創建一次并重復使用,并避免一次又一次地重新創建它。
以下是正則表達式的解釋:
^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$
^- 字符串的開始(?!000|666)- 這種否定的前瞻意味著,如果字符串以000or開頭,則匹配失敗666[0-8]- 然后匹配并消耗下一個數字,如果它在范圍0內8[0-9]{2}- 然后匹配并使用接下來的任意兩位數字,其中 [0-9] 表示您也可以緊湊地寫為的任何數字\d-- 然后是連字符(?!00)- 如果接下來的兩位數字是,則此否定前瞻將拒絕匹配00[0-9]{2}- 然后接下來它匹配并消耗任何兩位數-- 然后又是一個連字符(?!0000)- 如果接下來的四位數字是,則此否定前瞻將拒絕匹配0000[0-9]{4}- 然后接下來它匹配并消耗任何四位數字$- 字符串結束
希望我的解釋清楚。如有任何疑問,請告訴我。
這是我在評論中建議的代碼,
public static Pattern SOCIAL_SECURITY_NUM_PAT = Pattern.compile("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$");
public static boolean isValidSocialSecurityNumber(String input) {
return SOCIAL_SECURITY_NUM_PAT.matcher(input).matches();
}
您可以將此代碼放在某個類中SocialSecurityUtils.java,然后從您想要使用的任何地方調用它SocialSecurityUtils.isValidSocialSecurityNumber("socialsecuritynumber")
TA貢獻1839條經驗 獲得超15個贊
下面是這個模式的含義:^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$
(?!000|666): 在提供的字符串中向前看,并確保它沒有000or666。如果您找到這些模式,則匹配失敗 - 返回無效輸入。[0-8][0-9]{2}-: 期望三個數字后跟 a-,其中第一個數字的范圍是 0 到 8,另外兩個數字的范圍是 0 到 9(?!0000)與第一個類似,向前看并確保此模式0000不存在,否則驗證失敗[0-9]{4}: 期望從 0 到 9 的四位數字
至于^和$,它們分別匹配字符串的開頭和結尾。
TA貢獻1805條經驗 獲得超10個贊
您可以使用 aPattern將字符串與正則表達式匹配。
private static Pattern socSecPattern = Pattern.compile("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$");
private void setSocNum(String x){
if (!socSecPattern.matcher(x).matches()){
System.out.println("please enter a valid social security number")
}
}
將變量設置為靜態是個好主意,Pattern因為它將被多次調用。
添加回答
舉報
