- 浏览: 100783 次
- 性别:
- 来自: 宁波
文章分类
最新评论
-
njitluoluo:
replace into 要慎用。很容易引起主备库数据不同步, ...
MYSQL中replace into的用法
转载自 http://www.cnblogs.com/DavidYan/articles/2032115.html
php判断是否为中文正则表达式大全
<?php
$str="aaa";
if(!eregi("[^\x80-\xff]","$str"))
{
echo "是";
}
else
{
echo "不是";
}
?>
<?
$str = "中国";
echo $str;
echo "<hr>";
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
//只能在GB2312情况下使用
if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8
echo "正确输入";
} else {
echo "错误输入";
}
?>
如果想判断一个字符串内是否有含有中文,请用下面的代码:
if (preg_match("/[\x7f-\xff]/", $string)) {
echo "有中文";
}else{
echo "没有中文";
}
判断中文和编码有关 gbk是双字节,utf8是三字节,可以根据中文的范围来判断
编码范围1. GBK
(GB2312/GB18030)
\x00-\xff
GBK双字节编码范围
\x20-\x7f
ASCII
\xa1-\xff
中文
\x80-\xff 中文
2. UTF-8
(Unicode)
\u4e00-\u9fa5
(中文)
\x3130-\x318F
(韩文
\xAC00-\xD7A3
(韩文)
\u0800-\u4e00
(日文)
ps:
韩文是大于[\u9fa5]的字符
正则例子:
preg_replace(”/([\x80-\xff])/”,”",$str);
preg_replace(”/([u4e00-u9fa5])/”,”",$str);
- //判断内容里有没有中文-GBK (PHP)
- function check_is_chinese( $s ){
- return preg_match( '/[\x80-\xff]./' , $s );
- }
- //获取字符串长度-GBK (PHP)
- function gb_strlen( $str ){
- $count = 0;
- for ( $i =0; $i < strlen ( $str ); $i ++){
- $s = substr ( $str , $i , 1);
- if (preg_match( "/[\x80-\xff]/" , $s )) ++ $i ;
- ++ $count ;
- }
- return $count ;
- }
- //截取字符串字串-GBK (PHP)
- function gb_substr( $str , $len ){
- $count = 0;
- for ( $i =0; $i < strlen ( $str ); $i ++){
- if ( $count == $len ) break ;
- if (preg_match( "/[\x80-\xff]/" , substr ( $str , $i , 1))) ++ $i ;
- ++ $count ;
- }
- return substr ( $str , 0, $i );
- }
- //统计字符串长度-UTF8 (PHP)
- function utf8_strlen( $str ) {
- $count = 0;
- for ( $i = 0; $i < strlen ( $str ); $i ++){
- $value = ord( $str [ $i ]);
- if ( $value > 127) {
- $count ++;
- if ( $value >= 192 && $value <= 223) $i ++;
- elseif ( $value >= 224 && $value <= 239) $i = $i + 2;
- elseif ( $value >= 240 && $value <= 247) $i = $i + 3;
- else die ( 'Not a UTF-8 compatible string' );
- }
- $count ++;
- }
- return $count ;
- }
- //截取字符串-UTF8(PHP)
- function utf8_substr( $str , $position , $length ){
- $start_position = strlen ( $str );
- $start_byte = 0;
- $end_position = strlen ( $str );
- $count = 0;
- for ( $i = 0; $i < strlen ( $str ); $i ++){
- if ( $count >= $position && $start_position > $i ){
- $start_position = $i ;
- $start_byte = $count ;
- }
- if (( $count - $start_byte )>= $length ) {
- $end_position = $i ;
- break ;
- }
- $value = ord( $str [ $i ]);
- if ( $value > 127){
- $count ++;
- if ( $value >= 192 && $value <= 223) $i ++;
- elseif ( $value >= 224 && $value <= 239) $i = $i + 2;
- elseif ( $value >= 240 && $value <= 247) $i = $i + 3;
- else die ( 'Not a UTF-8 compatible string' );
- }
- $count ++;
- }
- return ( substr ( $str , $start_position , $end_position - $start_position ));
- }
- //判断是否是有韩文-UTF-8 (JavaScript)
- function checkKoreaChar(str) {
- for (i=0; i<str.length; i++) {
- if (((str.charCodeAt(i) > 0x3130 && str.charCodeAt(i) < 0x318F) || (str.charCodeAt(i) >= 0xAC00 && str.charCodeAt(i) <= 0xD7A3))) {
- return true;
- }
- }
- return false;
- }
- //判断是否有中文字符-GBK (JavaScript)
- function check_chinese_char(s){
- return (s.length != s.replace(/[^\x00-\xff]/g, "**" ).length);
- }
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汉字字母数字下划线正则表达式
<?php
$str="aaa";
if(!eregi("[^\x80-\xff]","$str"))
{
echo "是";
}
else
{
echo "不是";
}
?>
<?
$str = "中国";
echo $str;
echo "<hr>";
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
//只能在GB2312情况下使用
if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8
echo "正确输入";
} else {
echo "错误输入";
}
?>
如果想判断一个字符串内是否有含有中文,请用下面的代码:
if (preg_match("/[\x7f-\xff]/", $string)) {
echo "有中文";
}else{
echo "没有中文";
}
发表评论
-
jQuery 的 .get和.post和.ajax方法IE的兼容问题
2014-11-06 16:55 593本文转载自: http://blog.csdn.net/ ... -
PHP为什么会被认为是草根语言?
2014-02-21 16:52 530本文转载自: http://ww ... -
php获取客户端IP地址的几种方法
2013-08-27 21:10 926本文转载自: http://publish.it168. ... -
PHP:IP转换整形(转)
2013-08-27 16:20 677本文转载自: http://blog.chinaunix ... -
php出现Cannot modify header information问题的解决方法大全
2013-04-09 19:30 822本文转载自: http://www.jb51.net/a ... -
Windows XP/2003下Apache+PHP+MySQL+Zend Optimizer+phpMyAdmin安装配置
2012-09-01 10:01 2170转载自: http://www.360doc.co ... -
PHP获取当前相对于域名的目录,PHP获取当前目录
2012-08-29 13:00 789本文转载自: http://blog.163.com ... -
session.save_path目录大量session临时文件带来的服务器效率问题
2012-07-27 15:20 807转载自 http://hi.baidu.com/dir ... -
如何在命令行下运行PHP脚本[带参数]
2012-07-02 11:21 839本文转自 http://www.cnblogs.com/ ... -
PHP对浮点数进行四舍五入并精确到小数点后几位
2012-07-02 09:49 3558本文转自 http://www.beijibear.co ... -
如何安装phpMyAdmin-2.11.6
2012-01-06 16:40 1021因为phpMyAdmin3.0以上至少要php5.2版本才支持 ... -
PHP正则(详细)
2011-09-22 16:24 636转载自 http://blog.sina.com.cn/s ... -
半小时精通PHP正则表达式
2011-09-22 14:55 695转载自 http://blog.sina. ... -
浅析关于cookie和session-PHP编程教程(转)
2011-09-15 19:58 610转载自 http://www.mb5u.com/bianc ... -
Zend Studio7中文乱码的终极解决方法(转)
2011-09-06 14:11 2105转载自 http://info.codep ... -
ultraedit 32 使用时发现打开txt文件中文全是乱码
2011-09-02 14:50 1363直接打开txt就是中文 高级-配置-常规,在“常规”下 ... -
PHP页面编码声明方法详解(header和meta)(转)
2011-09-02 11:48 751转载自 http://www.didiao.net/?p= ... -
Windows 2000/XP 用户 安装设置邮件服务 实现 php mail发信
2011-08-20 11:43 916安装设置服务端 W ... -
谈谈新手如何学习PHP^_^(转)
2011-08-17 17:32 789出自 http://www.discuz. ...
相关推荐
对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。...
PHP通用正则验证,汉字转拼音,获取IP
在php中汉字正则可能有些朋友觉得很简单,但是在使用时会发现在gbk编码与uft8编码可能会有点区别哦,下面小编来介绍一下。gbk编码下汉字正则1.判断字符串是否全是汉字复制代码 代码如下:<?php $str = ‘全部是...
} 想当然的,在php中来判断字符串是否为中文,就会沿袭这个思路: 代码如下: <?php $str = “php编程”; if (preg_match(“/^[\u4e00-\u9fa5]+$/”,$str)) { print(“该字符串全部是中文”); } else { print(...
这个就是只是判断英文状态下的逗号,要是有人不小心输入了中文状态下的逗号怎么办?小数点怎么办?于是我就用正则写了一个表达式,把带有空格换行符之类的替换成逗号。 把提交的id带有空格换行符之类的替换成逗号,...
实例110 通过正则表达式对字符串进行匹配查找 141 实例111 通过IP地址查找主机所在地 142 实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用...
7.5 正则表达式与字符操作的综合应用 110 7.5.1 获得与模式匹配的数组单元—— 7.5.1 preg_grep 110 7.5.2 进行全局正则表达式的匹配—— 7.5.2 preg_match_all 111 7.5.3 进行正则表达式的匹配——preg_ 7.5.3 ...
注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介 《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...
注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介 《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发...
$a xor $b :异或 (当$a或$b为true时为true,两者一样时为false) ! $a :非 比较运算符有: $a == $b :相等 $a != $b :不等 $a $b :小于 $a $b :小于等于 $a > $b :大于 $a >= $b :大于等于 与C一样PHP也有...
5.1 具有正则表达式的TextView 5.2 ACTION!CALL!拨打电话 5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机振动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机...
5.1 具有正则表达式的TextView 5.2 ACTION!CALL!拨打电话 5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机振动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机...
5.1 具有正则表达式的TextView 5.2 ACTION!CALL!拨打电话 5.3 自制发送短信程序 5.4 自制发送E-mail程序 5.5 自制日历手机数据库 5.6 手机振动的节奏 5.7 图文可视化提醒 5.8 状态栏的图标与文字提醒 5.9 搜索手机...
快速转到位置 obj.scrollIntoView(true) 锚 <a name="first"> <a href="#first">anchors 网页传递参数 location.search(); 可编辑 obj.contenteditable=true 执行菜单命令 obj.execCommand 双字节字符 ...
实例089 验证输入的字符串是否为汉字 139 实例090 验证身份证号码 140 实例091 验证用户名和密码 142 实例092 验证车牌号码 144 实例093 验证网站地址 145 实例094 验证数量和金额 147 实例095 验证字符串是否以指定...
9.13 根据指定正则表达式识别超链接 9.14 验证Email地址的正确性 9.15 动态统计字符个数 9.16 使用jQuery验证用户年龄 9.17 按照首字母进行元素排序 9.18 获取URL地址的Hash参数 9.19 避免多行文本溢出的算法 9.20 ...
判断身份证的方法比使用正则表达式更加准确详细请看 js中的 checkidcard.js 判断省份证的 js function checkIsChinese(str){ if (str.length || str.length > 15){ return "姓名长度不正确"; } var ret=true...