第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

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

3 回答

?
MYYA

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)- 這種否定的前瞻意味著,如果字符串以000or開頭,則匹配失敗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")


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

TA貢獻1839條經(jīng)驗 獲得超15個贊

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

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

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

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

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

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


查看完整回答
反對 回復(fù) 2022-05-21
?
holdtom

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)用。


查看完整回答
反對 回復(fù) 2022-05-21
  • 3 回答
  • 0 關(guān)注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號