Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带条件的Javascript正则表达式_Javascript_Regex - Fatal编程技术网

带条件的Javascript正则表达式

带条件的Javascript正则表达式,javascript,regex,Javascript,Regex,可能重复: 我需要使用以下策略在javascript中进行密码验证。你能告诉我这个的正则表达式吗?我对正则表达式很陌生 密码长度应为8到18个字符,并且 密码应至少满足以下3个条件: 密码应至少有一个小写字符(a-z) 密码应至少有一个大写字符(a-z) 密码应至少有一个数值(0-9) 密码应具有特殊字符(即@.-#$%) 请帮我解决这个问题。我无法确定如何提供满足此要求的条件。此答案只是为了说明在一个正则表达式中执行此操作是多么不可读。请考虑其他更清洁的选择来编写代码。>/P> 它可以在

可能重复:

我需要使用以下策略在javascript中进行密码验证。你能告诉我这个的正则表达式吗?我对正则表达式很陌生

  • 密码长度应为8到18个字符,并且 密码应至少满足以下3个条件:
  • 密码应至少有一个小写字符(a-z)
  • 密码应至少有一个大写字符(a-z)
  • 密码应至少有一个数值(0-9)
  • 密码应具有特殊字符(即@.-#$%)

请帮我解决这个问题。我无法确定如何提供满足此要求的条件。

此答案只是为了说明在一个正则表达式中执行此操作是多么不可读。请考虑其他更清洁的选择来编写代码。>/P> 它可以在1个正则表达式中完成,但它很可怕:

^(?:(?=.*[a-z])(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])|(?=.*[a-z])(?=.*[A-Z])(?=.*\d)|(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])|(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9\x00-\x1f])).{8,18}$
它可以缩短一点,但仍然很难看:

^(?:(?=.*\d)(?=.*[^a-zA-Z0-9\x00-\x1f])(?:(?=.*[a-z])|(?=.*[A-Z]))|(?=.*[a-z])(?=.*[A-Z])(?:(?=.*\d)|(?=.*[^a-zA-Z0-9\x00-\x1f]))).{8,18}$
如您在问题中所述,有4个额外条件,对应于这些片段:

  • (?=.*\d)
    :查找数字(0-9)
  • (?=.*[a-z])
    :向前看一看小写英文字母表(a-z)
  • (?=.*[A-Z])
    :向前看一看大写英文字母表(A-Z)
  • (?=.[^a-zA-Z0-9\x00-\x1f])
    :查找数字和英文字母以外的字符。控制字符也被排除在外
就我所知,正则表达式中没有表示匹配4个条件中的3个条件的机制。所以我必须列举所有这些条件,它们占据了正则表达式的大部分


{8,18}
只需匹配任意字符的8-18即可。整个正则表达式都是用
^
$

锚定的。您尝试过任何方法并遇到了特定的问题吗?为什么你需要一个正则表达式呢?为什么你不一次检查一个正则表达式呢。应该足够简单。这里经常会问这个问题,它几乎是和的副本。这两个答案还表明,单个正则表达式并不真正适用于此。要求“密码应至少满足以下3个条件”使得无法仅使用一个正则表达式进行检查。使用4个带有计数器“多少失败”的regexp,如果计数器>2,则“密码错误”,感谢您的回复。在经历了几个线程之后,我明白了为什么不能用一个regexp来完成。所以我使用了4个regexp来实现它。