gpt4 book ai didi

java - 在 Java 中验证用户输入的社会安全号码

转载 作者:行者123 更新时间:2023-12-01 16:44:42 24 4
gpt4 key购买 nike

我想在初始化对象或使用 setter 在创建对象后更改该对象的值时验证社会安全号码的格式。显然,这将通过 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")
}
}

我不知道如何检查正则表达式字符串。如果有人可以帮助我处理这里的语法,我可以轻松地将其适应我正在学习的类(class)的其他部分。谢谢!

最佳答案

您可以使用Pattern来自 java 的类并使用其 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 开头,则匹配失败或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") 从任何您想要的地方调用它

关于java - 在 Java 中验证用户输入的社会安全号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54349323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com