正则表达式为高位和低位+数字或其他非字母

时间:2011-05-20 10:16:41

标签: javascript regex

在此处查看我的帖子

Regex for at least 8 + upper and lower+numbers or other non-alphabetic

假设我只需要下面这两个条件, 什么应该是正则表达式?

  1. 包含大写和小写字母。
  2. 包含数字或其他非字母字符。
  3. 我试过^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])$ 但没有工作

    但只是 -   - (?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])正在运作

    我可以仅使用(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])吗?

2 个答案:

答案 0 :(得分:4)

这里的问题是前瞻/后方是零宽度,“非消耗”。这意味着你的

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])$

永远不会匹配,因为看起来什么也没消耗,然后什么都没消失?仅匹配空字符串的^$,但这不符合您的前瞻标准。

所以你应该使用

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z]).*$

.*将消耗所有内容,并且前瞻确保标准。

您还可以定义用*替换{x,}的长度,其中x是字符串的最小字符数

答案 1 :(得分:1)

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])$

这意味着:字符串的开头后跟任何包含小写或大写或非字母的内容,但下一个位置必须是字符串的结尾 - 这不会发生。

您在上一个问题中接受的aswer是好的,有什么问题吗? 在这里,您可以阅读有关正则表达式http://cz.php.net/manual/en/regexp.reference.assertions.php

中的断言的更多信息