我需要知道包含字母数字字符的字符串的正则表达式,@,下划线(_),句号(。)而不是任何空格。还有字母数字字符,它允许空格。我试过这个正则表达式,
^[_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;
}
这是对的吗?我没有得到正确的结果。谁能指导我?
答案 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 ]+$