[英]java phone number validation
这是我的问题:
为给定字符串的电话号码创建一个构造函数,其形式为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均无效。
我想知道我的正则表达式是否正确
所以我想用正则表达式验证它,但我不知道我是否正确地做了。
它确实看起来过于复杂。 此外,匹配xxx-xxx-xxxx
或xxx-xxxx
,其中x
是数字,可以使用"(\\\\d{3}-){1,2}\\\\d{4}"
更好地完成。 要了解有关正则表达式的更多信息,我建议您浏览http://regular-expressions.info 。
我还要扔什么样的例外? 我需要创建自己的例外吗?
ValidatorException
似乎很简单。
public static void isPhoneNumberValid(String phoneNumber) throws ValidatorException {
if (!phoneNumber.matches(regex)) {
throws ValidatorException("Invalid phone number");
}
}
如果由于某些原因你不想自己创建一个,那么我可能会选择IllegalArgumentException
,但我仍然不建议这样做。
也就是说,此验证当然不包括国际和/或外部电话号码。 除非这是真正的功课,否则我建议重新考虑验证。
^(([(]?(\d{2,4})[)]?)|(\d{2,4})|([+1-9]+\d{1,2}))?[-\s]?(\d{2,3})?[-\s]?((\d{7,8})|(\d{3,4}[-\s]\d{3,4}))$
匹配:(0060)123-12345678,(0060)12312345678,(832)123-1234567,(006)03-12345678,
(006)03-12345678,00603-12345678,0060312345678
0000-123-12345678,0000-12-12345678,0000-1212345678 ......等
1234-5678,01-123-4567
可以用SPACE替换' - ',即(0080)123 12345678
也符合+ 82-123-1234567,+ 82 123 1234567,+ 800 01 12345678等。
更多关于家庭/私人号码。 不适用于1-800-000-0000类型的号码
您可以像BalusC建议的那样轻松匹配这些模式。
作为旁注, StringTokenizer
已被弃用。 来自JavaDoc :
StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。 建议任何寻求此功能的人都使用String的split方法或java.util.regex包。
将字符串拆分为适当段的更简单方法是:
String phoneParts[] = phoneNumber.split("-");
String pincode =“589877”;
Pattern pattern = Pattern.compile("\\d{6}");
\\ d表示数字。 在大括号内,Matcher matcher = pattern.matcher(pincode)的位数;
if (matcher.matches()) {
System.out.println("Pincode is Valid");
return true;
} else {
System.out.println("pincode must be a 6 digit Number");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.