zoukankan      html  css  js  c++  java
  • PHP及Javascript 正则判断中文(转)

    UTF-8匹配:

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

    var str = "php编程";

    if (/^[u4e00-u9fa5]+$/.test(str)) {

        alert("该字符串全部是中文");

    }

    else{

        alert("该字符串不全部是中文");

    }

     

    php中,是用x表示十六进制数据的。于是,变换成如下的代码:

    $str = "php编程";

    if (preg_match("/^[x4e00-x9fa5]+$/",$str)) {

    print("该字符串全部是中文");

    } else {

    print("该字符串不全部是中文");

    }

    貌似不报错了,判断的结果也正确,不过把$str换成“编程”两字,结果却还是显示“该字符串不全部是中文”,看来这样的判断还是不够准确。

    重要:查阅了<精通正则表达式>发现,对于[x4e00-x9fa5]这块东西,自己做一个强化的解释

    php的正则中, [x4e00-x9fa5],其实就是  字符和字符组的概念, x{hex},表达一个16进制数, 需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必须加上大括号,

    同时,如果是大于x{FF}的hex,必须和u 修饰符连用,不然会非法出错

    网上只能找到匹配全角字符的正则:   ^[x80-xff]*^/   ,这里可以不加大括号

    [u4e00-u9fa5]可以匹配中文,但是PHP又不支持   

    不过,既然x表示的十六进制数据,为什么和js里边提供的范围x4e00-x9fa5不一样呢?于是我就换成了下边的代码,发现真的准确了:

    $str = "php编程";

    if (preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str)) {

        print("该字符串全部是中文");

    } else {

        print("该字符串不全部是中文");

    }

     

    知道了php中utf-8编码下用正则表达式匹配汉字的最终正确表达式——/^[x{4e00}-x{9fa5}]+$/u,

    参考以上文章写了如下一段测试代码(复制以下代码保存成.php文件)

     

    <?php

    $action = trim($_GET['action']);

    if($action == "sub")

    {

        $str = $_POST['dir'];   

        //if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str)) //GB2312汉字字母数字下划线正则表达式

        if(!preg_match("/^[x{4e00}-x{9fa5}A-Za-z0-9_]+$/u",$str))   //UTF-8汉字字母数字下划线正则表达式

        {  

            echo "<font color=red>您输入的[".$str."]含有违法字符</font>";  

        }

        else

        {

            echo "<font color=green>您输入的[".$str."]完全合法,通过!</font>";  

        }

    }

    ?>

    <form method="POST" action="?action=sub">

    输入字符(数字,字母,汉字,下划线):

        <input type="text" name="dir" value="">

        <input type="submit" value="提交">

    </form>

     

    GBK:

    preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312汉字字母数字下划线正则表达式

  • 相关阅读:
    linux下shell显示-bash-4.1#不显示路径解决方法
    update chnroute
    An error "Host key verification failed" when you connect to other computer by OSX SSH
    使用dig查询dns解析
    DNS被污染后
    TunnelBroker for EdgeRouter 后记
    mdadm详细使用手册
    关于尼康黄的原因
    Panda3d code in github
    Python实例浅谈之三Python与C/C++相互调用
  • 原文地址:https://www.cnblogs.com/xcp19870712/p/3635327.html
Copyright © 2011-2022 走看看