php判断全是中文正则,php判断是否为中文正则表达式大全
php判斷是否為中文正則表達(dá)式大全
$str="aaa";
if(!eregi("[^\x80-\xff]","$str"))
{
echo "是";
}
else
{
echo "不是";
}
?>
$str = "中國(guó)";
echo $str;
echo "
";
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
//只能在GB2312情況下使用
if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8
echo "正確輸入";
} else {
echo "錯(cuò)誤輸入";
}
?>
如果想判斷一個(gè)字符串內(nèi)是否有含有中文,請(qǐng)用下面的代碼:
if (preg_match("/[\x7f-\xff]/", $string)) {
echo "有中文";
}else{
echo "沒有中文";
}
判斷中文和編碼有關(guān)
gbk是雙字節(jié),utf8是三字節(jié),可以根據(jù)中文的范圍來(lái)判斷
編碼范圍1. GBK
(GB2312/GB18030)?\x00-\xff
GBK雙字節(jié)編碼范圍?\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);
//判斷內(nèi)容里有沒有中文-GBK?(PHP)
functioncheck_is_chinese($s){
returnpreg_match('/[\x80-\xff]./',$s);
}
//獲取字符串長(zhǎng)度-GBK?(PHP)
functiongb_strlen($str){
$count=?0;
for($i=0;$i
$s=substr($str,$i,?1);
if(preg_match("/[\x80-\xff]/",$s))?++$i;
++$count;
}
return$count;
}
//截取字符串字串-GBK?(PHP)
functiongb_substr($str,$len){
$count=?0;
for($i=0;$i
if($count==$len)break;
if(preg_match("/[\x80-\xff]/",substr($str,$i,?1)))?++$i;
++$count;
}
returnsubstr($str,?0,$i);
}
//統(tǒng)計(jì)字符串長(zhǎng)度-UTF8?(PHP)
functionutf8_strlen($str)?{
$count=?0;
for($i=?0;$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;
elsedie('Not?a?UTF-8?compatible?string');
}
$count++;
}
return$count;
}
//截取字符串-UTF8(PHP)
functionutf8_substr($str,$position,$length){
$start_position=strlen($str);
$start_byte=?0;
$end_position=strlen($str);
$count=?0;
for($i=?0;$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;
elsedie('Not?a?UTF-8?compatible?string');
}
$count++;
}
return(substr($str,$start_position,$end_position-$start_position));
}
//判斷是否是有韓文-UTF-8?(JavaScript)
functioncheckKoreaChar(str)?{
for(i=0;?i
if(((str.charCodeAt(i)?>?0x3130?&&?str.charCodeAt(i)?=?0xAC00?&&?str.charCodeAt(i)?<=?0xD7A3)))?{
returntrue;
}
}
returnfalse;
}
//判斷是否有中文字符-GBK?(JavaScript)
functioncheck_chinese_char(s){
return(s.length?!=?s.replace(/[^\x00-\xff]/g,"**").length);
}
UTF-8匹配:
在javascript中,要判斷字符串是中文是很簡(jiǎn)單的。比如:
var str = "php編程";
if (/^[\u4e00-\u9fa5]+$/.test(str)) {
alert("該字符串全部是中文");
}
else{
alert("該字符串不全部是中文");
}
php中,是用\x表示十六進(jìn)制數(shù)據(jù)的。于是,變換成如下的代碼:
$str = "php編程";
if (preg_match("/^[\x4e00-\x9fa5]+$/",$str)) {
print("該字符串全部是中文");
} else {
print("該字符串不全部是中文");
}
貌似不報(bào)錯(cuò)了,判斷的結(jié)果也正確,不過(guò)把$str換成“編程”兩字,結(jié)果卻還是顯示“該字符串不全部是中文”,看來(lái)這樣的判斷還是不夠準(zhǔn)確。
重要:查閱了發(fā)現(xiàn),對(duì)于[\x4e00-\x9fa5]這塊東西,自己做一個(gè)強(qiáng)化的解釋
php的正則中, [\x4e00-\x9fa5],其實(shí)就是 字符和字符組的概念, \x{hex},表達(dá)一個(gè)16進(jìn)制數(shù),
需要注意的是hex 可以是1-2位的,也可以是4位的,但是如果是4位的必須加上大括號(hào),
同時(shí),如果是大于x{FF}的hex,必須和u 修飾符連用,不然會(huì)非法出錯(cuò)
網(wǎng)上只能找到匹配全角字符的正則:?^[\x80-\xff]*^/?,這里可以不加大括號(hào)
[\u4e00-\u9fa5]可以匹配中文,但是PHP又不支持?不過(guò),既然\x表示的十六進(jìn)制數(shù)據(jù),為什么和js里邊提供的范圍\x4e00-\x9fa5不一樣呢?于是我就換成了下邊的代碼,發(fā)現(xiàn)真的準(zhǔn)確了:
$str = "php編程";
if (preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str)) {
print("該字符串全部是中文");
} else {
print("該字符串不全部是中文");
}
知道了php中utf-8編碼下用正則表達(dá)式匹配漢字的最終正確表達(dá)式——/^[\x{4e00}-\x{9fa5}]+$/u,
參考以上文章寫了如下一段測(cè)試代碼(復(fù)制以下代碼保存成.php文件)
$action = trim($_GET['action']);
if($action == "sub")
{
$str =
$_POST['dir'];?//if(!preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str))
//GB2312漢字字母數(shù)字下劃線正則表達(dá)式
if(!preg_match("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))?//UTF-8漢字字母數(shù)字下劃線正則表達(dá)式
{?echo "
color=red>您輸入的[".$str."]含有違法字符
";?}else
{
echo "
color=green>您輸入的[".$str."]完全合法,通過(guò)!
";?}}
?>
action="?action=sub">
輸入字符(數(shù)字,字母,漢字,下劃線):
value="">
value="提交">
GBK:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str);
//GB2312漢字字母數(shù)字下劃線正則表達(dá)式
$str="aaa";
if(!eregi("[^\x80-\xff]","$str"))
{
echo "是";
}
else
{
echo "不是";
}
?>
$str = "中國(guó)";
echo $str;
echo "
";
//if (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
//只能在GB2312情況下使用
if (preg_match("/^[\x7f-\xff]+$/", $str)) { //兼容gb2312,utf-8
echo "正確輸入";
} else {
echo "錯(cuò)誤輸入";
}
?>
如果想判斷一個(gè)字符串內(nèi)是否有含有中文,請(qǐng)用下面的代碼:
if (preg_match("/[\x7f-\xff]/", $string)) {
echo "有中文";
}else{
echo "沒有中文";
}
總結(jié)
以上是生活随笔為你收集整理的php判断全是中文正则,php判断是否为中文正则表达式大全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 1581 优先队列 priori
- 下一篇: 钉钉老版本下载3.31_钉钉3.3.1老