有人可以解释这些角色的含义。我看了他们,但我似乎没有得到它。
整个正则表达式是:
/^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/
基本上是正则表达式和结束字符的开头。
答案 0 :(得分:30)
.
表示“任何角色”。*
表示“任意数量”。.*
因此意味着任意长度的任意字符串。^
表示字符串的开头。$
表示字符串的结尾。正则表达式表示:表达式(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])
与搜索字符串的开头和结尾之间可能有任意数量的字符。
答案 1 :(得分:13)
^.* //Start of string followed by zero or more of any character (except line break)
.*$ //Zero or more of any character (except line break) followed by end of string
所以当你看到这个......
(?=.*[@#$%^&+=]).*$
它允许任何字符(换行符除外)介于(?=.*[@#$%^&+=])
和字符串结尾之间。
要显示.
与任何字符都不匹配,请尝试以下操作:
/./.test('\n'); is false
要实际匹配任何字符,您需要的内容更像[\s\S]
。
/[\s\S]/.test('\n') is true
答案 2 :(得分:5)
主要文件:http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
/^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/
12345 6 7 89
1 - start of pattern, can be almost any character, and must have a matching character at the END of the pattern (see #9 below)
2 - anchors the pattern to the start of a line of text
3 - `.` matches any character
4 - a modifier, "0 or more of whatever came before"
- `.*` means "0 or more of ANY characters"
5 - A positive lookahead assertion: http://www.php.net/manual/en/regexp.reference.assertions.php
6 - A repetition indictor: http://www.php.net/manual/en/regexp.reference.repetition.php
- `{8,}` = "at least 8 of whatever came previously"
- `.{8,}` = "at least 8 'any' characters"
7 - A character class: http://www.php.net/manual/en/regexp.reference.character-classes.php
- `[a-z]` - any one character in the range 'a' - 'z' (the lower case alphabet)
8 - anchors the pattern to the end of the line
9 - end of the pattern, must match character used in #1 above.
答案 3 :(得分:4)
这匹配行的开头(^)后跟任何字符(。*):
^.*
这匹配任何字符(。*)前面的行尾($):
.*$
答案 4 :(得分:1)
^
匹配字符串的开头
$
匹配结尾
*
是任意数量的字符
答案 5 :(得分:0)
我将来帮助你的其他事情:
.*$
在给定此字符串的情况下,将匹配两次:"1"
如果你想知道为什么,它是因为它消耗所有字符,但之后也没有任何匹配。所以空字符串也是一个匹配。
答案 6 :(得分:0)
这看起来像典型的密码验证正则表达式,除了它有几个错误。首先,开头的.*
不属于那里。如果这些前瞻中的任何一个在字符串的开头没有成功,那么在下一个位置或下一个位置再次应用它们是没有意义的。
其次,虽然正则表达式确保这三种角色中的每一种都存在,但它没有说明字符串的其余部分。这可能是一个慎重的选择,但人们通常会尝试确保只有 这些字符存在。在这种情况下,您可能希望将第一个前瞻从(?=.{8,})
更改为(?=[A-Za-z@#$%^&+=]{8,}$)
。
最终结果:
/^(?=[A-Za-z@#$%^&+=]{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/