0

我正在尝试对电话号码进行一些验证,尽管我了解如何仅对固定大小的数字进行验证此任务有点棘手

我需要对用户的电话号码进行验证,但它必须采用如下所示的任何一种格式(空格不重要):

+44 (23) 92846438
(023) 92846438

我将如何创建一个自定义验证来验证上述电话号码的所有组合?

谢谢

我已经尝试创建一个支持 bean 并通过它进行验证

public class PhoneValidator implements Validator{

private static final String phone_PATTERN = "^[0-9-]{12,15}$";

    private Pattern pattern;
    private Matcher matcher;

    public UserNameValidator(){
          pattern = Pattern.compile(phone_PATTERN);
    }

    @Override
    public void validate(FacesContext context, UIComponent component,
            Object value) throws ValidatorException {

        matcher = pattern.matcher(value.toString());
        if(!matcher.matches()){

            FacesMessage msg = 
                new FacesMessage("Phone validation failed", 
                        "Invalid phone number.");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(msg);

        }

    }
}

像这样的工作:

private static final String phone_PATTERN = "^[+][44][(0-9)][0-9-]{12,15}$";

如果是这样,我怎样才能检查这两种方法

编辑,我已经尝试了上述方法,但它不起作用,我想我在这里是正确的,只是无法正确组合

4

2 回答 2

1
^(\\+\\d\\d )?\\(\\d{2,3}\\) \\d{8}$

以上匹配这两个示例。真正快速轻松地测试正则表达式@ regexpal.com

  • ^ 匹配字符串的开头
  • $ 匹配字符串的结尾
  • \java 需要双重转义(对于 \d,(等)
  • \d 匹配任何单个数字 (0-9)
  • {X} 表示前面的模式块必须出现 X 次,如果你很灵活,{X,Y} 也可以使用

  • 也可以考虑使用“|” (管道字符)代表“或”。例如:在 X|Y 中它将抓取 X 或 Y 的匹配项。

于 2013-11-07T00:07:58.497 回答
0

设法找到所需的正则表达式

万一有人需要它就在这里,它将适用于任何英国号码

private static final String Phone_PATTERN = "^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)44\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(?:\\d{2}\\)?[\\s-]?\\d{4}[\\s-]?\\d{4}|\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{3,4}|\\d{4}\\)?[\\s-]?(?:\\d{5}|\\d{3}[\\s-]?\\d{3})|\\d{5}\\)?[\\s-]?\\d{4,5}|8(?:00[\\s-]?11[\\s-]?11|45[\\s-]?46[\\s-]?4\\d))(?:(?:[\\s-]?(?:x|ext\\.?\\s?|\\#)\\d+)?)$";
于 2013-11-06T00:32:26.860 回答