我正在开展一个项目,允许用户只输入密码字母,字母和特殊字符( @。#$%^ & _-& * )在edittext中单独使用。我试过各种各样的方法。 **注意:严格限制空间
方法1:
在布局中设置数字如下
机器人:位数= “0,1,2,3,4,5,6,7,8,9,* @#$%_- \ ^&安培;< qwertzuiopasdfghjklyxcvbnmABCDEFGHIJKLMNOPQRSTUVWXYZ”
此方法运行正常,但我可以输入括号'(',分号';'我无法输入斜杠 '\'(我在数字标签中添加了)
方法2:
通过以下方法尝试正则表达式
public static boolean limitPasswordCharacters(String about){
// UserName Validation Pattern String
final Pattern USER_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9@.#$%^&*_&\\]+$");
if(USER_NAME_PATTERN.matcher(about).matches()){
return true;
}
return false;
}
但不幸的是,将
作为例外11-17 16:18:11.155: E/AndroidRuntime(15877): java.util.regex.PatternSyntaxException: Missing closing bracket in character class near index 22:
11-17 16:18:11.155: E/AndroidRuntime(15877): [a-zA-Z0-9@.#$%^&*_&\]
答案 0 :(得分:2)
如下所示更改您的模式,
final Pattern USER_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9@.#$%^&*_&\\\\]+$");
在java正则表达式中,要表示反斜杠,您需要将其转义三次。 Java将此\\]
视为lietral ]
括号。
示例:
String digits="0,1,2,3,4,5,6,7,8,9,*@#$%_-\\^.&<qwertzuiopasdfghjklyxcvbnmABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.println(digits.matches("^[-a-zA-Z0-9@.#$%^&*_&,<\\\\]+$")); //true
答案 1 :(得分:1)
只需将此行粘贴到您的edittext
android:digits="0123456789qwertzuiopasdfghjklyxcvbnm "