[英]Regular Expression allows specific special characters in java
我需要知道包含字母数字字符,@,下划线(_),句号(。)且没有任何空格的字符串的正则表达式。 并且也适用于字母数字字符,并且允许空格。 我尝试过这个正则表达式,
^[_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;
}
这个对吗? 我没有得到适当的结果。 谁能指导我?
移动破折号-
在字符类的末尾:
^[_A-Za-z0-9.@-]+$
和
^[A-Za-z0-9\\s-]+$
在两个字符之间表示一个范围。
编辑:您还需要一个+
修饰符来匹配字符类中的一个或多个字符。
我假设您正在通过EditText
小部件获得此输入。 因此,可以在XML
文件的布局内添加以下属性,以使其仅接收指定的字符。 :
android:digits="abcdefghijklmnopqrstuvwxyz0123456789,.-@_"
请注意,它将不允许使用任何大写字母。
只需添加您希望用户能够输入的任何数字/键即可。 如果您不担心任何字符的模式和出现次数 ,那么您甚至不需要任何正则表达式 。
希望能帮助到你
尝试
"[\\w@\\.]+" //for alphanumeric, @, .
"[\\w\\s]+" //for alphanumeric, spaces
如果需要匹配整个单词,请添加^和$。
PS:对于测试regexp,我始终使用RegexPlanet (而不是垃圾邮件:P)
希望能帮助到你。
您只缺少一个量词 。 在表达式^[_A-Za-z0-9.@-]$
, 字符类 [_A-Za-z0-9.@-]
与该类中的一个字符完全匹配。 要允许重复的字符,您需要定义一个数量词 。
*
{0,}
缩写{0,}
匹配0个或多个字符(==>这允许空字符串!)
+
{1,}
缩写{1,}
匹配1个或更多字符
{n,m}
匹配最小n
字符和最大m
字符。
所以你的正则表达式看起来像
^[_A-Za-z0-9.@-]+$
如果您需要1个或多个字符,或者
^[_A-Za-z0-9.@-]{6,20}$
如果您想要至少6个字符且最多20个字符。
其他事情:
您可以用\\w
替换_A-Za-z0-9
,但是请注意, \\w
是基于Unicode的,并且包含所有语言的所有字母和数字。
A-Za-z
仅是ASCII,也许您想看看Unicode属性 。 使用\\p{L}
可以匹配任何语言的字母。
在字符类的末尾缺少加号(意味着一个或多个), 并且可以大大简化:
^[\\w.@]+$
字符类中的字符失去了特殊的含义,因此除了方括号和其他几个字符外,不需要转义。
仅对于字母数字和空格,即字母,数字和空格的组合:
^[a-zA-Z0-9 ]+$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.