我正在检查带有以下正则表达式的字符串:
[a-zA-Z0-9]+
[A-Za-z]+
Run Code Online (Sandbox Code Playgroud)
由于某种原因,人物:
.
-
_
Run Code Online (Sandbox Code Playgroud)
被允许通过,为什么?
Joe*_*oey 18
如果你想检查完整的字符串是否只包含想要的字符,你需要锚定你的正则表达式,如下所示:
^[a-zA-Z0-9]+$
Run Code Online (Sandbox Code Playgroud)
否则,每一个字符串将传递一个包含允许的字符的字符串的地方.锚点基本上告诉正则表达式引擎开始在字符串的开头查找这些字符并停止查看字符串的结尾.
澄清一下:如果你只是[a-zA-Z0-9]+用作正则表达式,那么正则表达式引擎会正确地拒绝字符串,-__--因为正则表达式与正则表达式不匹配.您定义的字符类中没有单个字符.
然而,使用字符串a-b它是不同的.正则表达式引擎将匹配第一个a,因为它匹配您输入的表达式(至少一个给定的字符),并且不关心-或者b.它完成了它的工作,并根据你的正则表达式成功匹配一个子字符串.
与_-abcdef-- 相似- 正则表达式将匹配子字符串abcdef就好了,因为你没有告诉它只匹配字符串的开头或结尾; 并忽略其他字符.
因此,在使用^[a-zA-Z0-9]+$正则表达式时,您肯定会告诉正则表达式引擎您正在寻找一个或多个字母或数字,从字符串的最开始直到字符串的结尾.没有其他角色可以挤进或隐藏的空间,所以这将做你想要的.但是没有锚点,匹配可以在搜索字符串中的任何位置.出于验证目的,您始终希望使用这些锚点.
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |