3 回答

TA貢獻1868條經(jīng)驗 獲得超4個贊
您可以使用java 中的Pattern類并使用它的matches方法,該方法接受兩個參數(shù),第一個是您提到的正則表達式,第二個參數(shù)是一個字符串,它返回一個boolean值,該值將告訴字符串是否與正則表達式匹配。這是相同的示例代碼,
String input = "somedata";
Pattern.matches("^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$", input);
你的方法應(yīng)該是這樣的,
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
}
對象的創(chuàng)建Pattern很繁重,因此如果您打算使用多次調(diào)用它的代碼,您應(yīng)該創(chuàng)建一次并重復(fù)使用,并避免一次又一次地重新創(chuàng)建它。
以下是正則表達式的解釋:
^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$
^
- 字符串的開始(?!000|666)
- 這種否定的前瞻意味著,如果字符串以000
or開頭,則匹配失敗666
[0-8]
- 然后匹配并消耗下一個數(shù)字,如果它在范圍0
內(nèi)8
[0-9]{2}
- 然后匹配并使用接下來的任意兩位數(shù)字,其中 [0-9] 表示您也可以緊湊地寫為的任何數(shù)字\d
-
- 然后是連字符(?!00)
- 如果接下來的兩位數(shù)字是,則此否定前瞻將拒絕匹配00
[0-9]{2}
- 然后接下來它匹配并消耗任何兩位數(shù)-
- 然后又是一個連字符(?!0000)
- 如果接下來的四位數(shù)字是,則此否定前瞻將拒絕匹配0000
[0-9]{4}
- 然后接下來它匹配并消耗任何四位數(shù)字$
- 字符串結(jié)束
希望我的解釋清楚。如有任何疑問,請告訴我。
這是我在評論中建議的代碼,
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,然后從您想要使用的任何地方調(diào)用它SocialSecurityUtils.isValidSocialSecurityNumber("socialsecuritynumber")

TA貢獻1839條經(jīng)驗 獲得超15個贊
下面是這個模式的含義:^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$
(?!000|666)
: 在提供的字符串中向前看,并確保它沒有000
or666
。如果您找到這些模式,則匹配失敗 - 返回?zé)o效輸入。[0-8][0-9]{2}-
: 期望三個數(shù)字后跟 a-
,其中第一個數(shù)字的范圍是 0 到 8,另外兩個數(shù)字的范圍是 0 到 9(?!0000)
與第一個類似,向前看并確保此模式0000
不存在,否則驗證失敗[0-9]{4}
: 期望從 0 到 9 的四位數(shù)字
至于^
和$
,它們分別匹配字符串的開頭和結(jié)尾。

TA貢獻1805條經(jīng)驗 獲得超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")
}
}
將變量設(shè)置為靜態(tài)是個好主意,Pattern因為它將被多次調(diào)用。
添加回答
舉報