1

我想拒绝包含 az、AZ、0-9、-、_、@ 和 的最少 4 个字符、最多 39 个字符的用户名或密码字符串。并且字符应该是不重复和不增量的,例如“aaaa”或“1234”或“abcd”和 URL (HTTP-POST) 友好。

我一直在尝试研究String.matches()

这部分最少 4 个字符,最多 39 个字符,带有 az、AZ、0-9 似乎并不难,但是有没有办法在符合所有这些要求的匹配项上测试字符串?

4

1 回答 1

0

我会分别验证所有这些事情。这将使所有验证更简单、更易于理解和维护。

另外,您将知道违反了哪个约束,因此您可以向用户报告更准确的错误(例如“密码太短”而不是“您的密码应该验证以下约束:....”)

  • 长度:使用String.length()
  • 允许的字符:使用正则表达式:"^[a-zA-Z0-9_@\\.-]*$"
  • 非重复和非增量:正则表达式不是为了那个。正如评论中提到的,我会进行自定义验证(迭代输入的字符,检测字符的常量和递增序列)。像这样的东西应该工作:

    public boolean isBad(String test) {
        int repeating = 0;
        int incremental = 0;
        for (int i = 1; i < test.length(); ++i) {
            char prev = test.charAt(i - 1);
            char curr = test.charAt(i);
            if (prev == curr) {
                repeating++;
            } else {
                repeating = 0;
            }
            if (curr - prev == 1) {
                incremental++;
            } else {
                incremental = 0;
            }
            if (repeating == 3) {
                System.out.println("too many repeated " + curr);
                return true;
            }
            if(incremental==3){
                System.out.println("incrementing sequence");
                return true;
            }
        }
        return false;
    }
    
  • url-friendly:您对字符集(字母数字和一些符号)的限制应该足够了

于 2013-08-05T13:44:11.907 回答