回答
如果要檢查整個字符串只包含你需要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. 什麼是正則表達式這些
- 3. jqunit,測試正則表達式在某些時候失敗了,爲什麼?
- 4. 某些數字的正則表達式
- 5. 某些數字的正則表達式
- 6. 正則表達式與某些數字
- 7. 正則表達式會檢測這個字符串是什麼?
- 8. 爲什麼這些正則表達式的行爲不同
- 9. 這些正則表達式爲什麼不按預期工作?
- 10. 這些正則表達式爲什麼不同?
- 11. 正則表達式:忽略開頭爲這些字符的行
- 12. 爲什麼這個正則表達式對於某些查詢非常慢?
- 13. 正則表達式/ NG模式接受某些字符
- 14. 正則表達式匹配某些字符串模式
- 15. 正則表達式匹配字母,數字和某些符號
- 16. 只允許某些非字母字符在正則表達式
- 17. Java正則表達式 - 只允許某些字符和數字
- 18. 爲什麼我的正則表達式會因某些替換而失敗?
- 19. 正則表達式中的那些字符是什麼?
- 20. 正則表達式字母數字和一些某些特殊字符
- 21. 爲什麼這個AsyncCallback測試在某些時候會失敗?
- 22. 正則表達式匹配某些行
- 23. 什麼是PHP正則表達式來定位某些URL?
- 24. 爲什麼這個正則表達式測試不起作用?
- 25. 使接受某些字符的正則表達式
- 26. 允許某些特殊字符 - 正則表達式
- 27. 刪除只有某些類型的字符正則表達式
- 28. 正則表達式 - 禁止某些字符串
- 29. 正則表達式來僅排除某些字符
- 30. java正則表達式得到字符串的某些部分
你是如何檢查你的字符串?你能發佈整個驗證碼嗎? – moonshadow 2009-12-21 15:04:35
你用[^ a-zA-Z0-9]回覆它,並拒絕那些與之匹配的:) – Don 2009-12-21 16:00:39