【问题标题】:Regular Expression allows specific special characters in java正则表达式允许java中的特定特殊字符
【发布时间】:2014-01-31 10:26:36
【问题描述】:

我需要知道包含字母数字字符、@、下划线 (_)、句号 (.) 且不包含任何空格的字符串的正则表达式。也适用于字母数字字符,它允许空格。我试过这个正则表达式,

^[_A-Za-z0-9-\\.\\@]$ and ^[A-Za-z0-9-\\s]$

代码:

private static final String Username_REGEX ="^[_A-Za-z0-9.@-]$";

public static boolean isUsername(EditText editText, boolean required) {
    return isValid(editText, Username_REGEX,Username_MSG, required);
}


public static boolean isValid(EditText editText, String regex, String errMsg, boolean required) {
    String text = editText.getText().toString().trim();

    editText.setError(null);

  if ( required && !hasTextemt(editText) ) return false;

    if (required && !Pattern.matches(regex, text)) {
        editText.setError(errMsg);
        return false;
    };

    return true;
}

public static boolean hasTextemt(EditText editText) {

    String text = editText.getText().toString().trim();
    editText.setError(null);


    if (text.length() == 0) {
        editText.setError(emt);
        return false;
    }

    return true;
}

这是正确的吗?我没有得到正确的结果。谁能指导我?

【问题讨论】:

  • 您是否正在尝试验证电子邮件地址?
  • @DigveshPatel 是的,当然
  • @SMR 是的,我试过了,效果很好
  • 您忘记包含您的isValid 方法。您正在转发它的结果,所以它很重要。
  • @Pshemo 我粘贴了 isvalid 方法

标签: java android regex


【解决方案1】:

将破折号-移动到字符类的末尾:

^[_A-Za-z0-9.@-]+$

^[A-Za-z0-9\\s-]+$

两个字符之间表示一个范围。

编辑:您还需要一个+ 修饰符来匹配字符类中的一个或多个字符。

【讨论】:

  • 我将你的正则表达式放在我的正则表达式变量中,并用我的输入评估它显示无效文本
  • @Barbie:请编辑您的问题并添加您正在使用的代码。
  • @Barbie/ 我明白了,你必须在正则表达式的末尾添加一个 + 修饰符。这意味着它将匹配字符类中的一个或多个字符。
【解决方案2】:

我假设您通过EditText 小部件获取此输入。因此,在XML 文件的布局中,您可以添加以下属性,通过这些属性它将只接收指定的字符。 :

android:digits="abcdefghijklmnopqrstuvwxyz0123456789,.-@_"

请注意,它不允许任何大写字母。

只需添加您希望用户能够输入的任何数字/键。如果您担心任何字符的模式出现次数,那么您甚至不需要任何正则表达式强>。

希望对你有帮助

【讨论】:

    【解决方案3】:

    试试

    "[\\w@\\.]+" //for alphanumeric, @, .
    
    "[\\w\\s]+" //for alphanumeric, spaces
    

    如果您需要匹配整个单词,请添加 ^ 和 $。

    PS:为了测试正则表达式,我总是使用RegexPlanet(不是垃圾邮件:P)

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

      您只缺少一个quantifier。在您的表达式^[_A-Za-z0-9.@-]$ 中,character class [_A-Za-z0-9.@-] 与类中的一个字符完全匹配。要允许重复字符,您需要定义一个quantifier

      *{0,} 的缩写,匹配 0 个或多个字符(==> 这允许空字符串!)

      + 的缩写 {1,} 匹配 1 个或多个字符

      {n,m} 匹配最少 n 和最多 m 字符。

      所以你的正则表达式看起来像

      ^[_A-Za-z0-9.@-]+$
      

      如果您需要 1 个或多个字符,或者

      ^[_A-Za-z0-9.@-]{6,20}$
      

      如果你想要至少 6 个字符,最多 20 个字符。

      其他:

      • 您可以将 _A-Za-z0-9 替换为 \w,但请注意,\w 基于 Unicode,包含所有语言的所有字母和数字。

      • A-Za-z 只是 ASCII,也许你想看看Unicode properties。与例如\p{L}你可以匹配任何语言的字母。

      【讨论】:

        【解决方案5】:

        您在字符类的末尾缺少一个加号(表示一个或多个),并且您可以大大简化:

        ^[\\w.@]+$
        

        字符类中的字符失去其特殊含义,因此不需要转义,方括号和其他几个字符除外。


        仅适用于字母数字和空格,即只有字母、数字和空格的组合:

        ^[a-zA-Z0-9 ]+$
        

        【讨论】:

        • 我如何设计一个只允许字母数字字符和空格的正则表达式
        猜你喜欢
        • 2015-10-06
        • 2017-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多