正则表达式--PCRE不支持/L、/L、/N、/P。

问题描述 投票:29回答:2

我需要使用下面的正则表达式来验证一些亚洲字符。

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

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

preg_match() [function.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

谢谢你了

regex pcre
2个回答
45
投票

PCRE不支持 \uXXXX 语法。使用 \x{XXXX} 而不是。见 此处.

您的 \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。


0
投票
'/^[<\x{4e00}-\x{9fa5}>]+$/u';

试试这个。你上面发布的正则表达式不被PHP支持,但Javascript支持该表达式。

© www.soinside.com 2019 - 2024. All rights reserved.