要求输入的密码必须有大写字母和数字?
Require entered password to have a capital letter and a number?
我的应用程序有一个工作注册,下面的代码只是其中的一小部分。如您所见,有一堆要求来验证 password/username。
其中三个相似,但不起作用。这些是三个字符串:upperCaseChars、lowerCaseChars 和数字。我试图让密码在调用 'insertToDatabase' 之前必须包含一个大写字母、一个小写字母和一个数字。
我在整个互联网上搜索过,但找不到我要找的东西。 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);
检查是否存在大写字母比您想象的要容易。将整个字符串转为小写,看是否与原字符串匹配。
示例:
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+.*")
)
您现在设置它的方式将不起作用,因为它正在寻找密码中的整个字母串(A 到 Z)。您可以做的是创建自己的方法,如果三个布尔值变为真(例如:hasCapital、hasLowercase、hasNumeral),该方法将 return 为真。我建议使用一个字符数组,然后将密码字符串中的每个字符与每个条件的有效字符数组中的每个字符进行比较。
请记住,可能有比这个更好的解决方案。但它会起作用。
我的应用程序有一个工作注册,下面的代码只是其中的一小部分。如您所见,有一堆要求来验证 password/username。
其中三个相似,但不起作用。这些是三个字符串:upperCaseChars、lowerCaseChars 和数字。我试图让密码在调用 'insertToDatabase' 之前必须包含一个大写字母、一个小写字母和一个数字。
我在整个互联网上搜索过,但找不到我要找的东西。 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);
检查是否存在大写字母比您想象的要容易。将整个字符串转为小写,看是否与原字符串匹配。
示例:
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+.*")
)
您现在设置它的方式将不起作用,因为它正在寻找密码中的整个字母串(A 到 Z)。您可以做的是创建自己的方法,如果三个布尔值变为真(例如:hasCapital、hasLowercase、hasNumeral),该方法将 return 为真。我建议使用一个字符数组,然后将密码字符串中的每个字符与每个条件的有效字符数组中的每个字符进行比较。
请记住,可能有比这个更好的解决方案。但它会起作用。