要求输入的密码是否有大写字母和数字?

时间:2015-07-27 16:35:21

标签: java android validation passwords

我在我的应用程序上有一个工作注册,以下代码只是其中的一小部分。如您所见,验证密码/用户名有很多要求。

其中三个是相似的,不起作用。这些是三个字符串:upperCaseChars,lowerCaseChars和数字。我试图使密码在调用“插入数据库”之前必须包含一个大写字母,一个小写字母和一个数字。

我在互联网上搜索过,找不到我要找的东西。 P.S:我想以与if语句中的其他要求类似的方式添加它。有什么办法吗?

 public void invokeRegister(View view) {
        String name = editTextName.getText().toString();
        String pass = editTextPass.getText().toString();
        String pass2 = editTextPass2.getText().toString();
        String upperCaseChars = "(.*[A-Z].*)";
        String lowerCaseChars = "(.*[a-z].*)";
        String numbers = "(.*[0-9].*)";

        if (name.length() >= 4 && name.length() <= 12 && (pass.length() >= 6 && pass.length() <= 18 && (pass2.length() >= 0 && (pass.equals(pass2)) && pass.contains(upperCaseChars) ))) {
            insertToDatabase(name, pass);

2 个答案:

答案 0 :(得分:1)

检查是否存在大写字母比您想象的要容易。将整个String转换为小写,看它是否与原始字符串匹配。

示例:

String pass = "password" 
if( !pass.equals(pass.toLowerCase()) ) //fails

String pass = "passWord";
//lower casing becomes "password" and as a result, "passWord" doesn't match "password"
if( !pass.equals(pass.toLowerCase()) ) //passes

执行相反的操作以检查小写字母:

if( !pass.equals(pass.toUpperCase()) )

接下来为了确保密码包含数字的标准,请尝试以下操作:

String pass = "pa55w0rd";
if( pass.matches(".*\\d+.*") ) //passes

点击here查看此正则表达式的工作原理。

条件合并:

if( !pass.equals(pass.toLowerCase()) && 
    !pass.equals(pass.toUpperCase()) && 
    pass.matches(".*\\d+.*") 
  )

答案 1 :(得分:0)

你设置它的方式现在不会起作用,因为它在密码中寻找整个字母串(A到Z)。您可以做的是创建自己的方法,如果三个布尔变为真,则返回true(例如:hasCapital,hasLowercase,hasNumeral)。我建议使用一个字符数组,然后将密码字符串中的每个字符与每个条件的有效字符数组中的每个字符进行比较。

请记住,可能有比这更好的解决方案..但它会起作用。