我需要验证电话号码。它不是针对任何国家的,这是我的要求。
我的要求:
我可以使用以下代码满足前两个条件。第三个我不能陷入正则表达式。
我有以下代码:
final String regEx = "^[^\\s][-+()0-9]{1,20}$";
if (phoneNumber1 != null && !StringUtils.isEmpty(phoneNumber1) && (!phoneNumber1.matches(regEx)))
{
//error message
}
你可以帮我跟踪它是否包含空格吗?
答案 0 :(得分:0)
捕获两个非捕获组之间的选择。第一个是由非捕获组^$
包围的空字符串(?:^$)
。然后是第二个非捕获组|
中的交替运算符(?:\d+)
和至少一个数字(\ d +)。所有捕获的结果都是:
((?:^$)|(?:\d+))
查看详细说明:Regex101
在Java中,它看起来像这样:
String s[] = {"123456", "", "123 456"};
for (int i=0; i<s.length; i++) {
System.out.println(s[i].matches("((?:^$)|(?:\\d+))"));
}
真 真正 假
答案 1 :(得分:0)
如果最大值为20位,您可以尝试:
String[] phoneNumbers = new String[]{"", " ", "123 456", "123456"};
for (String p: phoneNumbers){
System.out.println( p.matches("^[0-9]{0,20}$") + " => " + p);
}
输出:
true => //blank phone number
false => //phone number completely filled with white spaces
false => 123 456
true => 123456
答案 2 :(得分:0)
在这种情况下,我会为所有空格创建一个正则表达式(例如&#34; \ s +&#34;)并检查它是否匹配。尝试为所有这些事情找出一个正则表达式可能会很有趣,但没有什么需要,并且通过保持简单来节省大量时间。
另一方面,我讨厌将这样的规则放在电话号码上。只删除所有非数字字符。为什么要关心用户是否输入语义上不重要的格式?这对用户来说真的很有帮助,可以避免拼写错误。