为了账号安全,请及时绑定邮箱和手机立即绑定

在 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 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号