中文的简单正则匹配-创新互联

在PHP中使用正则匹配中文,很多时候会出现问题,在不同的编码情况下,正则表达式不太一样,所以希望大家注意,在使用正则匹配中文的时候,多多注意编码问题。

十年的陇南网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整陇南建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“陇南网站设计”,“陇南网站推广”以来,每个客户项目都认真落实执行。

在JS下能够使用的在PHP中不一定可以使用,比如:/^[a-zA-Z0-9\_\.\_\.\u4E00-\u9FA5\uF900-\uFA2D]+$/;

如果在PHP中使用 :\u4E00-\u9FA5\uF900-\uFA2D  来匹配,那么会在运行PHP脚本的时候出现错误,

Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 6

那是因为:PHP正则表达式中不支持下列 Perl 转义序列:\L, \l, \N, \P, \p, \U, \u, or \X

但是在在 UTF-8 模式下,允许用“\x{...}”,花括号中的内容是表示十六进制数字的字符串,一下给出了一个简单的中文匹配示例:

        //匹配中文、英文字符、数字、特殊符号全角除外
	$str  = 'adf^^**^k2)(*&3423sfdgsdf#$%^423jkalk阿拉丁解放路dsfj';
	$rule = "/([\x80-\xff]{1,})/";
	echo "
";
	preg_match_all("/([?=[\x21-\x7e]{1,}|[A-Za-z0-9]{1,}|[\x{4e00}-\x{9fa5}]{1,})/u", $str, $m);
	var_dump($m);

	//支持特殊符号(半角)
	$rule = "/((?=[\x21-\x7e])[^A-Za-z0-9]){1,}/u";
	preg_match($rule, $str, $m);
	var_dump($m);

	//匹配中文····
	$str = "erwerwe.·中文·匹配·324#¥%……";
	$rule = "/([\x{4e00}-\x{9fa5}\·]{1,})/ius";
	preg_match($rule, $str, $m);
	var_dump($m);

	//匹配邮件
	$email ="qwerty234234@234567_#$%@yahoo.cn";
	//$email = "bieru52@aliyun.com";
	$rule = "/(^[a-zA-Z0-9][a-zA-Z0-9\.\_\-]{1,30}@[a-zA-Z0-9_-]{1,10}(\.[a-zA-Z0-9_-]{1,10}){0,4})\.[a-zA-Z]{1,10}$/";
	$m = preg_match($rule, $email);
	var_dump($m);

双字节字符编码范围

GBK (GB2312/GB18030)
x00-xff GBK双字节编码范围
x20-x7f ASCII
xa1-xff 中文 gb2312
x80-xff 中文 gbk

 UTF-8 (Unicode)

u4e00-u9fa5 (中文)

参考文档: 正则表达式30分钟入门教程

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:中文的简单正则匹配-创新互联
本文来源:http://scyanting.com/article/dspchc.html