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();
    }
    ....

所以这就是我在第 16 个电子邮件地址模式(JAVA 代码)来源中的内容:

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})+

正则表达式JS正则表达式验证器)告诉这个正则表达式大部分是正确的,但是在圆括号中\\.应该\.\\@应该在正则表达式\@中工作。

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

4

2 回答 2

1

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

于 2013-05-14T15:21:12.717 回答
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})+
于 2013-05-15T07:28:04.750 回答