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)
- 這種否定的前瞻意味著,如果字符串以000
or開頭,則匹配失敗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)
: 在提供的字符串中向前看,并確保它沒有000
or666
。如果您找到這些模式,則匹配失敗 - 返回無效輸入。[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因為它將被多次調用。
添加回答
舉報