最近几天,一直在为汉字验证的事纠结.百度了,google了,尼玛,找到的全是[u4e00-u9fa5]+$.这个是不对的,我怎么验证都不行,而且.这样验证只能是在utf8编码的情况下.在试了N天果后,今晚在baidu换了关键词终于找到了正确的正则表达式.以 后在网上分享东西..还是要验证过才能说啊.不能这样坑爹啊.
好了,主角上场."/^[x{4e00}-x{9fa5}]+$/u",就是他了,拿了直接用.哈哈.给力.给个例子吧,
代码如下 | 复制代码 |
$str = "坑爹的汉字验证"; if (preg_match("/^[x{4e00}-x{9fa5}]+$/u",$str)) } |
运行结果,你懂的,但在gbk下上面会影响汉字判断的准确性了,
接着gg找到一段代码
代码如下 | 复制代码 |
echo (mb_eregi("[x80-xff].","中d文") ? "有" : "无") ."汉字"; echo (mb_eregi("^([x80-xff].)+$","中文") ? "全是汉字" : ""); |
例
代码如下 | 复制代码 |
<?php $str = '汉字3测试'; if (preg_match("/([x81-xfe][x40-xfe])/", $str, $match)) { echo '含有汉字'; } else { echo '不含有汉字'; } ?> |
当$str = '汉字3测试'; 时输出"含有汉字";
当$str = 'abc345'; 时输出"不含有汉字";
下面的例子包含gbk,gb2312的用法,需要的可以取消gbk那行的注释,然后把utf-8的注释掉
代码如下 | 复制代码 |
<?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> |
时间: 2024-09-15 02:31:06