首页 > 解决方案 > 该方法在使用matches()、正则表达式、尝试验证电话号码时无法正常工作

问题描述

下午好,我需要编写一个验证电话号码的方法。我需要的数字只能包含数字(0-9)和这些字符 : "()" "-" "+" ,但其他一切都是禁止的!

例如 :

 +210-998-234-01234 -OK
  210-998-234-01234-OK
 +21099823401234-OK
 +210-998-234-01234 -OK
 +210-(998)-(234)-(01234) - OK

+210-99A-234-01234 - FALSE , +210-999-234-0""234 -FALSE , +210-999-234-02;4 - FALSE

如果该数字包含未解决的内容,则应引发异常。我写了这个方法,但由于某种原因它不能正常工作。请解释我在使用 match() 时出错的地方

我将不胜感激您的帮助!

public void validatePhoneNumber(String phoneNumber) {
        if (!phoneNumber.matches("[ˆ0-9()\\-+]")) {
            throw new IncorrectlyEnteredDataException("Phone number have unresolved characters");

        }

标签: javaregex

解决方案


此正则表达式适用于您的电话号码:

"^\\+?\\d{3}(?:\\d{11}|(?:-\\d{3,}){3}|(?:-\\(\\d{3,}\\)){3})"

但是,如果您想匹配各种电话号码的变体,请查看此解决方案 - Java 为有效电话号码生成 REGEX:

如何使用正则表达式验证电话号码

测试台和上下文中显示的正则表达式:

public class TestBench {

        private final static Pattern VALID_PHONE_NUMBER_PATTERN =
                Pattern.compile("^\\+?\\d{3}(?:\\d{11}|(?:-\\d{3,}){3}|(?:-\\(\\d{3,}\\)){3})");

        public static void main (String[] args) {
            List<String> inputNumbers = Arrays.asList(
                    "+210-998-234-01234",       // PASS
                    "210-998-234-01234",        // PASS
                    "+21099823401234",          // PASS
                    "+210-(998)-(234)-(01234)", // PASS
                    "+210-99A-234-01234",       // FAIL
                    "+210-999-234-0\"\"234",    // FAIL
                    "+210-999-234-02;4",        // FAIL
                    "-210+998-234-01234",       // FAIL
                    "+210-998)-(234-(01234"     // FAIL
            );

            for (String number : inputNumbers) {
                validatePhoneNumber(number);
            }
        }

    private static void validatePhoneNumber(String phoneNumber) {
        Matcher matcher = VALID_PHONE_NUMBER_PATTERN.matcher(phoneNumber);
        if(matcher.matches()) {
            System.out.println("This is a valid phone number: " + matcher.group());
        }
    }

}

输出:

This is a valid phone number: +210-998-234-01234
This is a valid phone number: 210-998-234-01234
This is a valid phone number: +21099823401234
This is a valid phone number: +210-(998)-(234)-(01234)

评论:

注意:您可以通过更改正则表达式中的 X 和 Y 等来更改可以容忍的数字数量,请参阅下面的说明:

"^\\+?\\d{3}(?:\\d{X}|(?:-\\d{Y,}){3}|(?:-\\(\\d{Y,}\\)){3})"

在建议的正则表达式中,我们假设在另一个变化出现之前总是先有三位数字。


推荐阅读