亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 中驗證用戶輸入的社會安全號碼

在 Java 中驗證用戶輸入的社會安全號碼

慕工程0101907 2022-05-21 14:11:45
我想在初始化對象或使用設置器在創建對象后更改該對象的值時驗證社會安全號碼的格式。顯然,這將通過 if 語句和正則表達式字符串來完成,但我不知道如何在 Java 中實現這一點。我在另一個網站上找到了這個表達式:Regex : ^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$ 但是,我無法判斷它是否準確,也無法理解檢查用戶輸入的語法。setSocNum(String x){if (![regex here]){System.out.println("please enter a valid social security number")}}我不知道如何檢查正則表達式字符串。如果有人可以幫助我使用此處的語法,我可以輕松地將其調整到我正在學習的課程的其他部分。謝謝!
查看完整描述

3 回答

?
MYYA

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]- 然后匹配并消耗下一個數字,如果它在范圍08

  • [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")


查看完整回答
反對 回復 2022-05-21
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

下面是這個模式的含義:^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$

  • (?!000|666): 在提供的字符串中向前看,并確保它沒有000or 666。如果您找到這些模式,則匹配失敗 - 返回無效輸入。

  • [0-8][0-9]{2}-: 期望三個數字后跟 a -,其中第一個數字的范圍是 0 到 8,另外兩個數字的范圍是 0 到 9

  • (?!0000)與第一個類似,向前看并確保此模式0000不存在,否則驗證失敗

  • [0-9]{4}: 期望從 0 到 9 的四位數字

至于^$,它們分別匹配字符串的開頭和結尾。


查看完整回答
反對 回復 2022-05-21
?
holdtom

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因為它將被多次調用。


查看完整回答
反對 回復 2022-05-21
  • 3 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號