回答
如果要检查整个字符串只包含你需要anchor您正则表达式像如下想要的字符:
^[a-zA-Z0-9]+$
否则每一个字符串将传递一个包含允许的字符的字符串某处。基本上,锚定器会告诉正则表达式引擎在字符串的起始处开始查找这些字符,并停止查看字符串的末尾。
澄清:如果您只是使用[a-zA-Z0-9]+
作为您的正则表达式,那么正则表达式引擎会正确拒绝字符串-__--
,因为正则表达式与此不匹配。您定义的字符类中没有单个字符。
但是,与字符串a-b
它是不同的。正则表达式引擎将与此处的第一个a
匹配,因为它与您输入的表达式(至少一个给定字符)匹配,并且不会在乎-
或b
。它已经完成了自己的工作,并根据您的正则表达式成功匹配了一个子字符串。
与_-abcdef-
类似 - 正则表达式匹配子字符串abcdef
就好了,因为您没有告诉它只匹配字符串的开始或结尾;并忽略其他字符。
所以当使用^[a-zA-Z0-9]+$
作为你的正则表达式时,你明确地告诉正则表达式引擎你正在寻找一个或多个字母或数字,从字符串的最开始直到字符串的结尾。没有其他角色挤入或隐藏的空间,所以这将做你明显想要的东西。但是没有锚点,匹配可以是任意位置在您的搜索字符串中。出于验证目的,您总是希望使用这些锚点。
但为什么是句号/短划线/下划线允许? – mrblah 2009-12-21 15:23:07
@mrblah:因为'[a-zA-Z0-9] +'只与该块中的一个或多个字符匹配。所以,如果你不固定它,只要有这些角色中的一个,它就会通过正则表达式。 – Powerlord 2009-12-21 15:34:30
到mrblah:阅读你的表达式为:找到一个或多个从a到z,从A到Z以及从0到9的符号。所以如果有其他符号 - 不关心。 ^表示您的符号应该从头开始,$ - 最后,并且当您将这两个符号都设置为约翰内斯时 - 从开始到结束,预计不会有其他符号。 – 2009-12-21 15:38:26
在正则表达式中,+表示引擎匹配一个或多个字符。
因此,如果字符串包含一个或多个字母字符序列,则此表达式[A-Za-z] +会通过。唯一不通过的字符串是根本不包含字母字符的字符串。
^符号将字符类锚定到字符串的开头,$符号锚定到字符串的末尾。
因此^ [A-Za-z0-9] +表示'匹配以一个或多个字母数字字符序列开始的字符串'。但只要这些字符不在字符串的开头,就会允许包含非字母数字的字符串。
虽然^ [A-Za-z0-9] + $表示'匹配以一个或多个字母数字字符序列开头和结尾的字符串'。这是从字符串中完全排除非字母数字的唯一方法。
- 1. 是什么,这些正则表达式
- 2. jqunit,测试正则表达式在某些时候失败了,为什么?
- 3. 正则表达式与某些数字
- 4. 这些正则表达式为什么不同?
- 5. 正则表达式:忽略开头为这些字符的行
- 6. 正则表达式匹配某些字符串模式
- 7. 正则表达式匹配字母,数字和某些符号
- 8. 只允许某些非字母字符在正则表达式
- 9. 为什么我的正则表达式会因某些替换而失败?
- 10. 正则表达式字母数字和一些某些特殊字符
- 11. 什么是PHP正则表达式来定位某些URL?
- 12. 为什么这个正则表达式测试不起作用?
- 13. 正则表达式 - 不包含某些字符
- 14. Notepadd ++正则表达式在某些位置替换字符
- 15. 正则表达式不某些字符串
- 16. 简单的正则表达式 - 忽略某些字符
- 17. PHP的正则表达式添加某些字符
- 18. 正则表达式或jquery的某些字符
- 19. 正则表达式 - 禁止某些字符串
- 20. 正则表达式不适用于某些字符串
- 21. 正则表达式字符串的某些部分
- 22. JavaScript正则表达式来检查某些字符
- 23. Notepad ++正则表达式替换包含某些字符串
- 24. java正则表达式得到字符串的某些部分
- 25. 不能在正则表达式中使用某些字符
- 26. 允许某些特殊字符 - 正则表达式
- 27. 正则表达式匹配某些特殊字符
- 28. 允许并防止正则表达式中的某些字符?
- 29. 某些长度的正则表达式忽略指定字符
- 30. 如何使用正则表达式来允许某些字符?
你是如何检查你的字符串?你能发布整个验证码吗? – moonshadow 2009-12-21 15:04:35
你用[^ a-zA-Z0-9]回复它,并拒绝那些与之匹配的:) – Don 2009-12-21 16:00:39