用条件或条件简化/简化正则表达式

时间:2019-04-23 14:57:04

标签: regex

我编写了以下正则表达式以检查以下情况

  • 至少一个低位字母a-z与大写字母A-Z的组合
  • 至少一个小写字母a-z与数字0-9的组合
  • 至少一个上位字母A-Z与数字0-9的组合
((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9]))

有效输入是:-

  • aA

  • a1

  • A1

有什么办法可以缩短/简化此正则表达式?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,可以将规则改为:

  • 输入必须仅包含字母数字字符
  • 拒绝任何仅由数字组成的输入
  • 拒绝任何仅包含小写字母的输入
  • 拒绝任何仅包含大写字母的输入

您的正则表达式不检查输入的开头/结尾,也不验证所有字符都是字母数字(.*太宽),因此它将接受无效的输入。

您可以这样做:

^(?!\d*$|[A-Z]*$|[a-z]*$)[a-zA-Z\d]*$

答案 1 :(得分:0)

Would ([a-z]+[A-Z])|(([a-z]+|[A-Z]+)[0-9]) be what you're looking for?