Android android.util.Patterns.EMAIL_ADDRESS奇怪的行为

时间:2013-05-14 14:32:14

标签: java android regex email

今天我们经历了奇怪的模式行为。

例如,在平板电脑上有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 正则表达式验证程序)告诉此正则表达式大部分正确,但在圆括号中,\\.应为\.和{{1}应该\\@在regexpal中工作。

此外还不太清楚,为什么第一个括号中有两个'\ +'符号组?

2 个答案:

答案 0 :(得分:1)

使用Pattern.pattern()函数从可运行的设备获取模式的值,并从中创建自己的Pattern对象。这样,您就不会在跨设备的实现方面存在差异。同样适用于Geocoder,这在某些设备上对我不起作用。

答案 1 :(得分:1)

我们当前的解决方案,有效:

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