我需要为条件&#34设置密码字段的错误;只允许使用2~22个字符和符号_,#34;
但我有点卡在这里。
这是我到目前为止所得到的:
if(
!(editText.length() >= 2 && editText.length() <= 22 ) ||
!(editText.contains("-") || editText.contains("_") || editText.contains(","))
) {
//set error message
}
但问题是,如果我输入的符号不是_或 - ,则错误信息仍然无法显示。对于输入长度,错误消息显示应该如此。
答案 0 :(得分:4)
在java中,使用:
Show()
答案 1 :(得分:1)
您的||
或连字符,下划线和逗号的命令会使用户 至少包含其中一个字符。
您也没有检查有效字符列表。 A-Z? 0-9? A-Z?您将需要查看Package java.util.regex包或迭代字符串并检查每个字符。
答案 2 :(得分:1)
你的逻辑存在问题,使用&amp;&amp;在&lt; = 22之后)代替|| 试试这个:
if(!((editText.length() >= 2 && editText.length() <= 22 ) && (editText.contains("-") || editText.contains("_") || editText.contains(","))))
答案 3 :(得分:1)
我相信你可以使用正则表达式来研究我来到Regex Library for Strong Password
您可以为您的目的实施以下正则表达式
^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[a-z]).{2,22}$
^ Start anchor
(?=.*[A-Z].*[A-Z]) Ensure string has uppercase letters.
(?=.*[!@#$&*]) Ensure string has one special case letter.
(?=.*[a-z]) Ensure string has lowercase letters.
.{2,22} Ensure string is of 2 char long and Max of 22.
$ End anchor.
if(editText.matches(^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[a-z]).{2,22}$))
{
//set error message
}
答案 4 :(得分:0)
您可以使用正则表达式。
但是否则,你需要遍历字符串以确保 no 字符是&lt; 'a'或&gt; 'z'而不是('_'或' - ')。
就“长度”检查而言,这可能更具可读性:
(editText.length() < 2 || editText.length() > 22 )
但是再次 - 我鼓励你考虑使用正则表达式:
http://www.vogella.com/tutorials/JavaRegularExpressions/article.html