Java中的电话号码验证

San*_*and 3 java regex validation

我使用以下代码验证电话号码.要求是电话号码应在10-25个字符之间,应包括hypen( - ),句点(.),括号().

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class ValidatePhoneNumber {

public static void main(String[] argv) {

    String phoneNumber = "6058.8()6-05888,9994567";
    System.out.println(phoneNumber.length());
    //String sPhoneNumber = "605-88899991";
    //String sPhoneNumber = "605-888999A";
    String regex = "^[0-9.()-]{10,25}$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(phoneNumber);

    if (matcher.matches()) {
        System.out.println("Phone Number Valid");
    } else {
        System.out.println("Phone Number must be in the form XXX-XXXXXXX");
    }
  }
 }
Run Code Online (Sandbox Code Playgroud)

我检查了验证及其工作正常,我想添加一个空白字符"\ s",以便在电话号码之间也可以有空格.但是在正则表达式中添加"\ s"时会出错.

bew*_*bew 7

请查看ITU E.164或IETF RfC 3966等标准.不要假设每个国家/地区都有相同的约定和数字长度.

这是RfC 3966中相关的ABNF部分

global-number-digits = "+" *phonedigit DIGIT *phonedigit
phonedigit           = DIGIT / visual-separator 
visual-separator     = "-" / "." / "(" / ")"
DIGIT = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"
Run Code Online (Sandbox Code Playgroud)

我们最近遇到了一个设备,它没有让用户输入"+"作为电话号码的一部分.