我已经看到有关电话号码认证的多个问题/答案,这很好,但是如果字符串严格是电话号码,所有这些都只能看到工作。就我而言,我们可能会收到这样的字符串:
"好的,我的号码是313-123-1234。现在让我们......"
电话号码的格式也会有所不同,所以我认为如果正则表达式可以处理" 10个数字的任何序列,忽略() - 。&#会更好34;
我尝试了一些不同的事情,包括:
"^((\\+\\d{1,2}|1)[\\s.-]?)?\\(?[2-9](?!11)\\d{2}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}$"
和
"/[0-9]{10}\\b/"
除其他外,如果它本身就是电话号码,那么它会再次发挥作用,但是当我在完整字符串上调用myStrig.matches(myRegex);
时,它总是返回false。
话虽如此,是否存在本地解决方案,例如PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)
可以使用上面提到的示例短语,或者什么是在这种情况下实际可行的正则表达式?
谢谢!
答案 0 :(得分:-1)
尝试使用此模式:
String REGEX_PHONE_NUMBER_ALL = "(?:\\(\\d{3}\\)|\\d{3}[-]*)\\d{3}[-]*\\d{4}";
答案 1 :(得分:-1)
所以,首先,Android的Pattern.matches(string, regex);
似乎存在一个已知问题。相反,你应该使用:
Pattern p = Pattern.compile(myRegex);
Matcher m = p.matcher(myString);
if(m.find()) {
// true
}
其次,我原来的正则表达式仍然不适用于我需要的所有场景,但是由于Wiktor Stribiżew建议,它现在有效。
他建议将^
替换为(?<!\\w)
,将$
替换为(?!\\w)
。
我的正则表达式现在看起来像这样:
(?<!\w)((\+\d{1,2}|1)[\s.-]?)?\(?[2-9](?!11)\d{2}\)?[\s.-]?\d{3}[\s.-]?\d{4}(?!\w)
它有效!
作为参考,以下是我测试过的一些基本场景: