【问题标题】:Specific String validation using regex使用正则表达式的特定字符串验证
【发布时间】:2017-10-08 07:18:24
【问题描述】:

有人告诉我使用正则表达式而不是 isUpperCase()isLowerCase() 等...但我不知道如何使用正则表达式。

这是我需要检查的:

length min = 8 characters
length max = 20 characters
must contain at least one lower case character (a-z)
must contain at least one upper case character (A-Z)
must contain at least one number (0-9)
must contain at least one special character

谢谢。

【问题讨论】:

标签: java regex validation constraints


【解决方案1】:

这是一个来自 Javascript 的示例。 Java 将类似:

var password = '0Aa!.......'
const regexp = /[0-9]?[a-z]?[A-Z]?[^0-9A-Za-z]?/;
var isValid = (password.length >= 8 && password.length <= 20) && regexp.test(password);

这测试至少有一个数字,然后是一个大写字母,然后是一个小写字母,最后一个不是数字或字母。它演示的是概念,而不是确切的解决方案。

我同意其他人的观点,即您应该深入阅读。正则表达式和 Java 都有很好的文档记录。

【讨论】:

  • 这不匹配“AAAAAAA”吗?您的示例需要非常具体的顺序。如果没有前瞻,我认为这是不可能的
  • 你是对的,骗子。我试图演示如何使用正则表达式,而不是确切的解决方案是什么。这个问题被否决了,但我想给作者一个做更多阅读的起点。这就是为什么我没有用 Java 做答案(他正在寻找)。
【解决方案2】:

注意:我没有在 Java 中测试过,但这确实适用于 pcre 引擎。

^(?=.{8,20}$)(?=[^A-Z]*?[A-Z])(?=[^a-z]*?[a-z])(?=[^0-9]*?[0-9])(?=[^!@#$%^&*]*?[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]+$

分解:

    ^(?=.{8,20}$)               //this matches 8 to 20 characters, inclusive (positive lookahead)
    (?=[^A-Z]*?[A-Z])           //this matches if one uppercase letter is present (positive lookahead)
    (?=[^a-z]*?[a-z])           //this matches if one lowercase letter is present (positive lookahead)
    (?=[^0-9]*?[0-9])           //this matches if one digit is present (positive lookahead)
    (?=[^!@#$%^&*]*?[!@#$%^&*]) //this matches if one special character is present (positive lookahead)
    [a-zA-Z0-9!@#$%^&*]+$       //this matches if the enclosed characters are present

这对于你想要的可能有点过头了,但我已经在这里测试过了: https://regex101.com/r/P0J4X8/1

此外,在前瞻中可能不需要惰性求值器

【讨论】:

  • 非常感谢。我将在 Java 中对此进行测试。请问一下,这个额外的检查(“不能包含一个或多个相同的连续字符”)会变成正则表达式吗?
  • 我试过以下字符串:“.getInfo(0)$%@;”但它没有用。
  • 我会研究负前瞻、捕获组和重复捕获组。
【解决方案3】:

如果你想学习,如何使用正则表达式,我推荐以下

  • 阅读你的讲义
  • 阅读一本 Java 书籍(尤其是关于“模式”和“正则表达式”的章节)
  • 阅读 Java 文档,例如关于Pattern

【讨论】:

    【解决方案4】:

    大写的正则表达式是[A-Z],小写的正则表达式是[a-z] 两个测试至少出现一次给定的字符组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多