1

今日、私たちは奇妙なパターンの振る舞いを経験しました。

たとえば、3.2 ストック ROM (以前は 4.0.+) を搭載したタブレットでは、うまく機能します。

しかし、他の 3.2 タブレットや 4.0 デバイスではそうではありません。

メール機能をテストする機能は次のようなものです。

public static boolean checkEmail(CharSequence emailAddress){
    if( Build.VERSION.SDK_INT >= 8 ){
        return android.util.Patterns.EMAIL_ADDRESS.matcher(emailAddress).matches();
    }
    ....

これは、電子メール アドレス パターン (JAVA コード) の 16 番目のソースにあるものです。

public static final Pattern EMAIL_ADDRESS
    = Pattern.compile(
        "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
        "\\@" +
        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
        "(" +
            "\\." +
            "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
        ")+"
    );

これが「正規化された」バージョンです:

[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}\\@[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}(\\.[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25})+

Regexpal ( JS regex validator) は、この正規表現がほとんど正しいことを示していますが、丸括弧では正規表現で動作する\\.必要が\.あり、動作する\\@必要があり\@ます。

さらに、最初の中かっこに '\+' グループの記号が 2 つある理由は明確ではありません。

4

2 に答える 2

1

Pattern.pattern()動作しているデバイスから関数を使用してパターンの値を取得し、それから独自のPatternオブジェクトを作成します。このようにして、デバイス間で実装に違いが生じることはありません。にも同じGeocoderことが言えますが、一部のデバイスでは機能しませんでした。

于 2013-05-14T15:21:12.717 に答える