2011-12-29 53 views
1

我在下面的正則表達式中添加字符Ö(U + 00D6)。顯然有什麼地方出了問題,因爲它不適用於我的preg_match功能。在PHP的正則表達式中使用unicode

正則表達式的正常工作:

/^([A-Z]{1})[a-z]{1,31}$/ 

應該工作,但不會將一個:

/^([A-Z\x{00D6}]{1})[a-z]{1,31}$/ 

我顯然想要創建一個啓動一個大寫正則表達式字母擴展爲Ö,後面跟着小寫字母。總的來說,字符串的長度必須在2-32之間。包含Ö的Unicode表達式的正則表達式有什麼問題?

回答

2

\x{00D6}只會匹配單個字節\xD6符號。當你將一個字符串傳遞給preg_match時,它很可能是用UTF-8編碼的,它是\xC3 \x96

您需要使用/u modifier爲您的正則表達式來支持。

/^([A-Z\x{00D6}]{1})[a-z]{1,31}$/u 

此外{1}是裝飾性的,但多餘的。

+0

你剛剛救了我的一天。感謝您回答實際問題和關於{1}多餘的部分。 – gzg 2011-12-29 03:50:58