"/^[".chr(0xa1)."-".chr(0xff)."]+$/"
匹配中文的!

解决方案 »

  1.   

    补充~~我又多试验了几次,发现有时 英文+中文+数字 才会false
    如:“sd的123”
    但是“ff方法23”就是true...晕死
      

  2.   

    utf8是多字节的
    直接用char可能不行的
    可以看看正则的u标记,和utf8下的的字符表示方法
      

  3.   

    多谢1f,但那个貌似不能匹配utf8字符集的中文~~页面是
    http://www.wowsk.info/reg_guide.php可以用“工会名称”试验~~
      

  4.   

    $str = "php编程";
    if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {
    print("该字符串全部是中文");
    } else {
    print("该字符串不全部是中文");
    }网上找的
      

  5.   

    我没说清楚,sorry我想实现的是随便输入英文、数字、中文都可以,现在试了许多匹配,大多都pass了,只有那个“sd的123”卡住了不知道是因为什么~~
      

  6.   


    /[\x7f-\xff\d\w]+/i英文数字字母都可以的,不区别编码,gb2312,utf-8都可以.
      

  7.   

    $str = "sd的123";
    if (preg_match("/^([{\x{4e00}-\x{9fa5}]|[0-9a-zA-Z])+$/u",$str)) {
    print("通过");
    } else {
    print("通不过");
    }
      

  8.   


    手上说:
    在“\x”之后最多再读取两个十六进制数字(其中的字母可以是大写或小写)。在 UTF-8 模式下,允许用“\x{...}”,花括号中的内容是表示十六进制数字的字符串。原来的十六进制转义序列 \xhh 如果其值大于 127 的话则匹配了一个双字节 UTF-8 字符。 所以,建议仍用\x{...},如果准确匹配utf8,要用它,因为gb,gbk均是双字节的,如果匹配gb,gbk,没有问题,但utf8有为1-4字节,可能会出错
      

  9.   

    我没有仔细看手册.
    呵呵,看来得好好研究一下.
    \u的哪个其实也可以,只是preg_match不支持\u的写法,NN个雄.
      

  10.   

    我也是临时看了一下,不一定准确,回头再看看utf8编码规则
      

  11.   

    $str = "sd的123"; 
    if (preg_match("/^([{\x{4e00}-\x{9fa5}]|[0-9a-zA-Z])+$/u",$str)) { 
    print("通过"); 
    } else { 
    print("通不过"); 
    }pass/[\x7f-\xff\d\w]+/i
    这个连标点也能输入...呵呵结贴