求正则表达式:只保留字符串中的汉字和字母

解决方案 »

  1.   

    输入  #$%^4sdfg3哈哈sdfgfdg$@#%@#$%AS<h>?><,.~!tt方法
    输出  哈哈方法
      

  2.   

    需要unicode
    preg_replace('#[^a-z\u4e00-\u9fbb]#i', '', $string)GBK下分开全角符号和汉字要复杂些
      

  3.   

    不是 utf-8 编码时,需转码$s = '#$%^4sdfg3哈哈sdfgfdg$@#%@#$%AS<h>?><,.~!tt方法';
    echo preg_replace('/[\d\W_]/u', '', $s);
    sdfg哈哈sdfgfdgAShtt方法你#1的补充与原帖的需求不符
    echo preg_replace('/[\d\W_a-z]/iu', '', $s);哈哈方法
      

  4.   

    补充的有误.输出是  sdfg哈哈sdfgfdgAShtt方法
      

  5.   

    不是说了吗,gbk 需转码
    echo iconv('utf-8', 'gbk', preg_replace('/[\d\W_]/u', '', iconv('gbk', utf-8', $s)));
      

  6.   


    对输入的任何字符都只保留汉字和字母,即过滤掉其他字符。
    \d \W 是数字和非字母吧。这样即使转换了utf8也把汉字过滤掉了
      

  7.   


    echo iconv('utf-8', 'gbk', preg_replace('/[^a-zA-Z\x{4e00}-\x{9fa5}]/u', '', iconv('gbk', 'utf-8', $str_word)));exit;
      

  8.   

    就是不知道用16进制这样能不能兼容所有的情况。gbk和gb2312还不一样
      

  9.   


    9fbb才对,a5后面还有十多个汉字的