限制android密码edittext中的特殊字符

时间:2014-11-17 10:58:37

标签: java android regex validation android-edittext

我正在开展一个项目,允许用户只输入密码字母字母和特殊字符( @。#$%^ & _-& * )在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@.#$%^&*_&\]

2 个答案:

答案 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 "