【发布时间】:2011-02-03 01:17:16
【问题描述】:
这是我的问题:
为电话号码创建一个构造函数,给定一个字符串,格式为 xxx-xxx-xxxx 或 xxx-xxxx 用于本地号码。如果格式无效,则抛出异常。
所以我想使用正则表达式来验证它,但我不知道我是否正确地做。还有我必须抛出什么样的异常?我需要创建自己的异常吗?
public TelephoneNumber(String aString){
if(isPhoneNumberValid(aString)==true){
StringTokenizer tokens = new StringTokenizer("-");
if(tokens.countTokens()==3){
areaCode = Integer.parseInt(tokens.nextToken());
exchangeCode = Integer.parseInt(tokens.nextToken());
number = Integer.parseInt(tokens.nextToken());
}
else if(tokens.countTokens()==2){
exchangeCode = Integer.parseInt(tokens.nextToken());
number = Integer.parseInt(tokens.nextToken());
}
else{
//throw an excemption here
}
}
}
public static boolean isPhoneNumberValid(String phoneNumber){
boolean isValid = false;
//Initialize reg ex for phone number.
String expression = "(\\d{3})(\\[-])(\\d{4})$";
CharSequence inputStr = phoneNumber;
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(inputStr);
if(matcher.matches()){
isValid = true;
}
return isValid;
}
您好,抱歉,是的,这是作业。对于此分配,唯一有效的格式是 xxx-xxx-xxxx 和 xxx-xxxx,所有其他格式 (xxx)xxx-xxxx 或 xxxxxxxxxx 在这种情况下都无效。
我想知道我的正则表达式是否正确
【问题讨论】:
-
这是作业吗?如果是这样,应该这样标记......
-
显而易见的问题:您确定您的电话号码格式可以捕获用户可能想要输入的任何电话号码吗?没有什么比拒绝接受完全有效数据的半智能系统更令人沮丧的了。 (哦,如果这只是家庭作业 - 没关系。)
-
完全同意@Tomalak。如果这是一个生产系统,正确的答案是去掉所有非数字字符并验证结果数字。
-
StringTokenizer 是不好的做法。
-
"StringTokenizer 是不好的做法。" @fuzzy lollipop,提供解释为什么这是不好的做法会很有帮助,如下面@haldean 的回答。
标签: java regex validation