php 正则匹配中文

正则匹配汉字在不同的编码,不同的程序语言上都有些细微的出入,稍不注意就会得不到正确的结果,特此对比一下 javascript 和 php 的正则匹配汉字,而且 php 中的 gb2312 和 utf-8 两种编码匹配规则还不相同同。

在javascript中,要判断字符串是中文是很简单的:

<script type="text/javascript">
    var str = "我热爱编程";
    if(/^[\u4e00-\u9fa5]+$/ . test(str)) {
        alert("该字符串全部是中文");
    } else {
        alert("该字符串不全部是中文");
    }
</script>

php 匹配 gb2312/gbk 编码汉字的正确写法是:

<?php
    header("Content-type:text/html;charset=gb2312");
    $str = "我热爱编程";
    if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {// gb2312/gbk
        print("该字符串全部是中文");
    } else {
        print("该字符串不全部是中文");
    }
?>

注:上面的也适用于匹配 gbk 编码汉字,因为 gbk 编码包含了所有 gb2312 编码字符。两种编码的区别请参考:http://blog.youkuaiyun.com/raige/article/details/4860035

php 匹配 utf-8 编码汉字的正确写法是:

<?php
    header("Content-type:text/html;charset=utf-8");
    $str = "我热爱编程";
    if(preg_match("/^[\x{4e00}-\x{9fa5}]+$/u", $str)) { // utf-8
        print("该字符串全部是中文");
    } else {
        print("该字符串不全部是中文");
    }
?>

注意别漏写符 u !关于正则表达式修饰符请参考: http://my.oschina.net/banbo/blog/308073

转载于:https://my.oschina.net/banbo/blog/308111

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值