在此处查看我的帖子
Regex for at least 8 + upper and lower+numbers or other non-alphabetic
假设我只需要下面这两个条件, 什么应该是正则表达式?
我试过^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])$
但没有工作
但只是 -
- (?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])
正在运作
我可以仅使用(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^a-zA-Z])
吗?
答案 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
中的断言的更多信息