2010-08-21 84 views
19

我需要使用以下正則表達式來驗證一些亞洲字符PHP - 正則表達式 - PCRE不支持 L,升, N, P,

$regexp = "/^[\-'\u2e80-\u9fff\sa-zA-Z.]+$/"; // with warning 

$regexp = "/^[\-'\sa-zA-Z.]+$/"; // without warning 

的preg_match()[函數。 preg-match]:編譯失敗:PCRE不支持\ L,\ l,\ N,\ P,\ p,\ U,\ u或\ X。

你知道如何改變正則表達式模式,這樣我可以從\u2e80-\u9fff

我使用的是最新的驗證亞洲字符XAMPP

Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 

謝謝

+0

請參閱[regular-expressions.info/unicode](http://www.regular-expressions.info/unicode.html#category)。支持'\ p {L}'等,並且完整...斷言「PCRE不支持\ L,\ l,\ N,\ P」**接近false **。 – 2014-08-13 10:57:23

回答

32

PCRE不支持\uXXXX語法。改爲使用\x{XXXX}。見here

\u2e80-\u9fff範圍也相當於

\p{InCJK_Radicals_Supplement}\p{InKangxi_Radicals}\p{InIdeographic_Description_Characters}\p{InCJK_Symbols_and_Punctuation}\p{InHiragana}\p{InKatakana}\p{InBopomofo}\p{InHangul_Compatibility_Jamo}\p{InKanbun}\p{InBopomofo_Extended}\p{InKatakana_Phonetic_Extensions}\p{InEnclosed_CJK_Letters_and_Months}\p{InCJK_Compatibility}\p{InCJK_Unified_Ideographs_Extension_A}\p{InYijing_Hexagram_Symbols}\p{InCJK_Unified_Ideographs}

不要忘記添加u修飾符(/regex here/u)如果你正在處理UTF-8。如果你正在處理另一個多字節編碼,你必須首先將其編碼爲UTF-8。