【问题标题】:How to write the if condition for this situation?这种情况下的if条件怎么写?
【发布时间】:2015-10-15 04:10:25
【问题描述】:

我需要为密码字段设置错误,条件是“只允许 2~22 个字符和符号,_ - ”。

但我有点卡在这里。

这是我目前得到的:

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

但问题是,如果我输入除 、_ 或 - 以外的符号,错误消息仍然不显示。对于输入长度,错误消息会按原样显示。

【问题讨论】:

  • 查看字符串匹配方法:stackoverflow.com/a/14278602/792238
  • 你试过正则表达式吗?
  • 刚刚试过这个 editText.matches("^[a-zA-Z\-,_]{2,22}$") 但它显示非法字符...

标签: java if-statement


【解决方案1】:

在java中,使用:

editText.matches("^[A-Za-z,_\\-]{2,22}$");

【讨论】:

    【解决方案2】:

    您的|| 或连字符、下划线和逗号的命令使用户必须至少包含这些字符中的每一个。

    您也没有检查有效字符列表。 AZ? 0-9? a-z?您将需要查看 Package java.util.regex 包或遍历字符串并检查每个字符。

    【讨论】:

      【解决方案3】:

      你的逻辑有问题,在

      if(!((editText.length() >= 2 && editText.length() <= 22 ) && (editText.contains("-") || editText.contains("_") || editText.contains(","))))
      

      【讨论】:

        【解决方案4】:

        我相信您可以在研究我遇到 Regex Library for Strong Password 时使用 Regex 来实现这一点

        您可以根据自己的目的实施以下正则表达式

        ^(?=.*[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
        }
        

        【讨论】:

          【解决方案5】:

          您可能可以使用正则表达式。

          但除此之外,您需要遍历字符串以确保 no 字符是 'z' 而不是('_' 或 '-')。

          就“长度”检查而言,这可能更具可读性:

          (editText.length() < 2 || editText.length() > 22 ) 
          

          但同样 - 我鼓励您考虑使用正则表达式:

          http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-10-29
            • 1970-01-01
            • 2013-04-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-01
            相关资源
            最近更新 更多