【问题标题】:Restrict special characters in android password edittext限制android密码edittext中的特殊字符
【发布时间】:2014-11-17 10:58:36
【问题描述】:

我正在做一个项目,在该项目中,用户只能输入带有字母字母和特殊字符(如 (@.#$%^) 的密码&_-&*) 单独在编辑文本中。我尝试了各种方法,例如。 **注意:空间受到严格限制

方法一:

在布局中设置数字如下

android:digits="0,1,2,3,4,5,6,7,8,9,*@#$%_-\^.&

此方法运行良好,但我可以输入 brackets'(', semicolon ';' 但我无法输入 slash '\'(我已在数字标签中添加)

方法二:

通过以下方法尝试正则表达式

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@.#$%^&*_&\]

【问题讨论】:

    标签: java android regex validation android-edittext


    【解决方案1】:

    像下面这样改变你的模式,

    final Pattern USER_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9@.#$%^&*_&\\\\]+$");
    

    在 java regex 中,要表示反斜杠,您需要将其转义 3 次。 Java 将这个 \\] 视为一个中立的 ] 括号。

    例子:

    String digits="0,1,2,3,4,5,6,7,8,9,*@#$%_-\\^.&<qwertzuiopasdfghjklyxcvbnmABCDEFGHIJKLMNOPQRSTUVWXYZ";
    System.out.println(digits.matches("^[-a-zA-Z0-9@.#$%^&*_&,<\\\\]+$")); //true
    

    【讨论】:

    • 当然,慢慢来。
    • avinash 一切正常,但斜线 () 在正则表达式中不起作用
    • 你能解释一下上面的评论吗?哇,你来自钦奈?
    • 是否允许使用反斜杠?
    • 也应该限制空间
    【解决方案2】:

    只需将此行粘贴到您的编辑文本中

    android:digits="0123456789qwertzuiopasdfghjklyxcvbnm " 
    

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多