我已经看到许多关于正则表达式的建议,以找到字符串中的空格,这些空格到目前为止都没有。是的,使用for for循环遍历字符串的概念将起作用。我真的想学习如何用正则表达式和模式匹配器做到这一点!我的问题是我需要添加到我的正则表达式字符串的内容和位置,以便返回FALSE?下面的代码我添加了许多(\\ s)的化身无济于事。我不想删除空格。
我测试了建议作为重复的代码,它不起作用,请参阅评论中建议的链接
String tstr = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]";
String astr = etPW.getText().toString().trim();
Pattern regex = Pattern.compile(tstr);
Matcher regexMatcher = regex.matcher(astr);
boolean foundMatch = regexMatcher.find();
if(foundMatch == false){
Toast.makeText( MainActivity.this, "Password must have one Numeric Value\n"
+ "\nOne Upper & Lower Case Letters\n"
+ "\nOne Special Character $ @ ! % * ? &", Toast.LENGTH_LONG ).show();
//etPW.setText("");
//etCPW.setText("");
// Two lines of code above are optional
// Also by design these fields can be set to input type Password in the XML file
etPW.requestFocus();
return ;
}
答案 0 :(得分:2)
您可以使用否定前瞻来检查空格:
^(?!.* )
^
- 在字符串的开头开始匹配。
(?!
- 开始一个负向的前瞻组(括号内的模式不能接下来。
.*
- 任意次数的非换行字符,后跟空格。
)
- 关闭否定前瞻组。
结合完整的正则表达式模式(也清除了一点以消除冗余):
^(?!.* )(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@$%&*?])[A-Za-z\\d!@$%&*?]+