正则表达式允许java中的特定特殊字符

时间:2014-01-31 10:26:36

标签: java android regex

我需要知道包含字母数字字符的字符串的正则表达式,@,下划线(_),句号(。)而不是任何空格。还有字母数字字符,它允许空格。我试过这个正则表达式,

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

CODE:

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;
}

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

5 个答案:

答案 0 :(得分:3)

在字符类的末尾移动短划线-

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

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

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

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

答案 1 :(得分:2)

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

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

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

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

希望有所帮助

答案 2 :(得分:0)

尝试

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

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

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

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

希望它有所帮助。

答案 3 :(得分:0)

您只缺少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}您可以匹配任何语言的字母。

答案 4 :(得分:0)

你在字符类的末尾错过了一个加号(意思是一个或多个),你可以大大简化:

^[\\w.@]+$

角色类中的角色失去了它们的特殊含义,所以不需要进行转义,除了方括号和其他几个。


仅对于字母数字和空格,这只是字母,数字和空格的组合:

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