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

标签 java android regex email

今天我们遇到了奇怪的模式行为。

例如,在带有 3.2 stock 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})+

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

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

最佳答案

使用 Pattern.pattern() 函数从正在运行的设备获取 pattern 的值,并从中创建您自己的 Pattern 对象。这样你就不会在不同设备的实现上有差异。 Geocoder 也是如此,它在某些设备上对我不起作用。

关于java - Android android.util.Patterns.EMAIL_ADDRESS 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545974/

相关文章:

java - Tomcat 无法在 Servlet 3.0 中为 JSP 编译类

java - 将 void 的输出写入 .txt 文件

Android Camera2 api 和 exif

java - 在 word 中突出显示子字符串

javascript - 正则表达式 : Retrieve the GUID inside [ ] parenthesis

java - 电话号码分割(国际版)java

java - Android 中读取文件的速度很慢

java - android类构造函数中的最佳实践

Android MediaMetadataRetriever setDataSource 失败

python - 如何通过pandas过滤满足正则表达式的行