如何为这种情况编写if条件?

时间:2015-10-15 04:10:25

标签: java if-statement

我需要为条件&#34设置密码字段的错误;只允许使用2~22个字符和符号_,#34;

但我有点卡在这里。

这是我到目前为止所得到的:

if(
  !(editText.length() >= 2 && editText.length() <= 22 ) ||
    !(editText.contains("-") || editText.contains("_") || editText.contains(","))
  ) {
  //set error message
}

但问题是,如果我输入的符号不是_或 - ,则错误信息仍然无法显示。对于输入长度,错误消息显示应该如此。

5 个答案:

答案 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