0

私は電話番号でいくつかの検証を行おうとしていますが、設定されたサイズの数字だけの検証を行う方法は理解しています。このタスクは少しトリッキーです

ユーザーの電話番号を検証する必要がありますが、以下に示すいずれかの形式である必要があります (スペースは重要ではありません)。

+44 (23) 92846438
(023) 92846438

上記の電話番号のすべての組み合わせに対して検証するカスタム検証を作成するにはどうすればよいですか?

ありがとう

私はバッキングビーンを作成し、それを通して検証しようとしました

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 @ regexpal.comで、正規表現をすばやく簡単にテストしてください。

  • ^ は文字列の先頭に一致します
  • $ は文字列の末尾に一致します
  • \ java には二重エスケープが必要です (\d、( など)
  • \d は任意の 1 つの数字 (0 ~ 9) に一致します
  • {X} は、前のパターン チャンクが X 回発生する必要があることを意味します。柔軟であれば {X,Y} も機能します。

  • 「|」の使用も検討してください 「または」を表す (パイプ文字)。例: in 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 に答える