3 回答
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]- 然后匹配并消耗下一个数字,如果它在范围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")
TA贡献1839条经验 获得超15个赞
下面是这个模式的含义:^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$
(?!000|666): 在提供的字符串中向前看,并确保它没有000or666。如果您找到这些模式,则匹配失败 - 返回无效输入。[0-8][0-9]{2}-: 期望三个数字后跟 a-,其中第一个数字的范围是 0 到 8,另外两个数字的范围是 0 到 9(?!0000)与第一个类似,向前看并确保此模式0000不存在,否则验证失败[0-9]{4}: 期望从 0 到 9 的四位数字
至于^和$,它们分别匹配字符串的开头和结尾。
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因为它将被多次调用。
添加回答
举报
