/^[\x{4e00}-\x{9fa5}]+$/u以上这个正则表达式就是困扰了很多php程序员的匹配汉字的正则表达式大家可能会觉得很简单,实际上不同编码,不同程序语言,都有些细微的出入,稍不注意就得不到正确的结果。下面是utf-8编码的例子:$str="汉字";if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {print("该字符串全部是中文");} else {print("该字符串不全部是中文");}
下面的例子包含gbk,gb2312的例子:
<?php /* php教程 www.512Pic.com */$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>