如何最好地使用Java部分验证电话号码
我需要验证电话号码的开头,我的意思是我需要确保提供了国家代码。电话号码应以加号开头,后跟至少1个号码,最多3个号码,后跟连字符 有效数字的示例 +1-555-5555 +12-55555 +123-(555)555-5555 无效电话号码的示例 +1(555)555-5555 55555555 +55555555 这就是我目前所拥有的。我正在做的是剥离所有非数字,以验证我至少有10个数字。然后,我验证我的国家/地区代码至少为3个数字。之后,如果电话号码不是以“+”开头,我会先加一个如何最好地使用Java部分验证电话号码,java,regex,validation,Java,Regex,Validation,我需要验证电话号码的开头,我的意思是我需要确保提供了国家代码。电话号码应以加号开头,后跟至少1个号码,最多3个号码,后跟连字符 有效数字的示例 +1-555-5555 +12-55555 +123-(555)555-5555 无效电话号码的示例 +1(555)555-5555 55555555 +55555555 这就是我目前所拥有的。我正在做的是剥离所有非数字,以验证我至少有10个数字。然后,我验证我的国家/地区代码至少为3个数字。之后,如果电话号码不是以“+”开头,我会先加一个 privat
private boolean isPhoneNumberValid(String phoneNumber) {
if (!isPhoneNumberLengthValid(phoneNumber) || !isCountryCodeLenghtValid(phoneNumber)) {
return false;
}
if (!phoneNumber.startsWith("+")) {
request.getDestination().setMobilePhoneNumber("+" + phoneNumber);
}
return true;
}
private boolean isPhoneNumberLengthValid(String phoneNumber) {
return phoneNumber.replaceAll("\\D+","").length() < 10;
}
private boolean isCountryCodeLenghtValid(String phoneNumber) {
String countryCode = StringUtils.left(phoneNumber, phoneNumber.indexOf("-")).replaceAll("\\D+","");
return countryCode.length() >= 1 && countryCode.length() <= 3;
}
专用布尔值isPhoneNumberValid(字符串phoneNumber){
如果(!isPhoneNumberLengthValid(电话号码)| |!isCountryCodeLengthValid(电话号码)){
返回false;
}
如果(!phoneNumber.startsWith(“+”)){
request.getDestination().setMobilePhoneNumber(“+”+phoneNumber);
}
返回true;
}
专用布尔值isPhoneNumberLengthValid(字符串phoneNumber){
返回phoneNumber.replaceAll(“\\D+”,”).length()<10;
}
私有布尔值isCountryCodeLenghtValid(字符串phoneNumber){
字符串countryCode=StringUtils.left(phoneNumber,phoneNumber.indexOf(“-”).replaceAll(“\\D+”,”);
return countryCode.length()>=1&&countryCode.length()首先,我必须说,要求电话号码符合特定的格式和长度通常不是一个好主意,因为这样会使很多有效号码无效,但我不知道您的使用情况
尽管我会使用正则表达式:
\+\d{1,3}-[()\d\s-]+
此正则表达式匹配具有
- 字面上的加号
- 后跟1-3位数字
- 然后是连字符
- 然后是括号、数字、空格或连字符集中的一个或多个字符
最后一个类别可以根据您的具体规格进行更改
导入java.util.regex.Pattern;
类电话号码{
受保护的静态无效检查编号(字符串编号){
System.out.println(数字+“:”+(
Pattern.matches(“\\+\\d{1,3}[-][()\\d\\s-]+”,数字)
?“有效”:“无效”
)
);
}
公共静态void main(字符串[]args){
字符串编号;
支票号码(“+1-555-5555”);
支票号码(“+12-555”);
支票号码(“+123-(555)555-5555”);
支票号码(“+1(555)555-5555”);
支票号码(“5555”);
支票号码(“+5555”);
}
}
这将产生:
+1-555-5555 : valid
+12-5555555 : valid
+123-(555) 555-5555 : valid
+1(555) 555-5555 : invalid
5555555555 : invalid
+5555555555 : invalid
试试这个
- 以
+
- 然后是
1-3位数
- 然后是
-
- 后跟
任何内容
对于您的示例电话号码,您可以使用可选组来匹配括号之间的数字,并使连字符可选
^\+\d{1,3}-(?:\(\d{3}\)\h*)?\d{3}-?\d{4}$
解释
^
字符串的开头
\+\d{1,3}-
(?:
非捕获组
\(\d{3}\)\h*
匹配(
,3位,)
和0+水平空白字符
)?
关闭组并将其设置为可选
\d{3}-?\d{4}
匹配3位数字,可选的-
和4位数字
$
字符串结尾
|
在爪哇
String regex = "^\\+\\d{1,3}-(?:\\(\\d{3}\\)\\h*)?\\d{3}-?\\d{4}$";
比如说
String strs[] = {
"+1-555-5555",
"+12-5555555",
"+123-(555) 555-5555",
"+1(555) 555-5555",
"5555555555",
"+5555555555",
"+123-)(----"
};
String regex = "\\+\\d{1,3}-(?:\\(\\d{3}\\)\\h*)?\\d{3}-?\\d{4}";
for (String s : strs)
System.out.printf("%s --> %s%n", s, s.matches(regex) ? "Match" : "No match");
输出
+1-555-5555 --> Match
+12-5555555 --> Match
+123-(555) 555-5555 --> Match
+1(555) 555-5555 --> No match
5555555555 --> No match
+5555555555 --> No match
+123-)(---- --> No match
您可以使用下面给出的解决方案中提到的正则表达式:
public class Main {
public static void main(String[] args) {
String[] phoneNumbers = { "+1-555-5555", "+12-5555555", "+123-(555) 555-5555", "+1(555) 555-5555", "5555555555",
"+5555555555" };
for (String phoneNumber : phoneNumbers) {
if (phoneNumber.matches("^[+][0-9]{1,3}[-][[(]{0,1}[0-9]+[-)\\s]{0,1}]*[0-9]{4}$")) {
System.out.println(phoneNumber + " passed validation");
} else {
System.out.println(phoneNumber + " failed validation");
}
}
}
}
输出:
+1-555-5555 passed validation
+12-5555555 passed validation
+123-(555) 555-5555 passed validation
+1(555) 555-5555 failed validation
5555555555 failed validation
+5555555555 failed validation
举个例子,你的正则表达式应该是这样的:+\d\d?\d?\-[0-9()\-]+这是用户提供的数据吗?如果是这样的话,最好在你的电话字段中实现一个掩码。谢谢大家!
+1-555-5555 passed validation
+12-5555555 passed validation
+123-(555) 555-5555 passed validation
+1(555) 555-5555 failed validation
5555555555 failed validation
+5555555555 failed validation