首頁 後端開發 php教程 php判断是不是为中文正则表达式大全(转)

php判断是不是为中文正则表达式大全(转)

Jun 13, 2016 pm 01:06 PM
count echo match str

php判断是否为中文正则表达式大全(转)

转载自?? http://www.cnblogs.com/DavidYan/articles/2032115.html

?

?

php判断是否为中文正则表达式大全

?


$str="aaa";
if(!eregi("[^\x80-\xff]","$str"))
{
echo "是";
}
else
{
echo "不是";
}
?>



$str = "中国";
echo $str;
echo "


";

//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);???

?

?

  1. //判断内容里有没有中文-GBK?(PHP)????? ??
  2. function ?check_is_chinese( $s ){????? ??
  3. ????? return ?preg_match( '/[\x80-\xff]./' ,? $s );????? ??
  4. }????? ??
  5. ??? ??
  6. //获取字符串长度-GBK?(PHP)????? ??
  7. function ?gb_strlen( $str ){????? ??
  8. ????? $count ?=?0;????? ??
  9. ????? for ( $i =0;? $i strlen ( $str );? $i ++){????? ??
  10. ????????? $s ?=? substr ( $str ,? $i ,?1);????? ??
  11. ????????? if ?(preg_match( "/[\x80-\xff]/" ,? $s ))?++ $i ;????? ??
  12. ???????????++ $count ;????? ??
  13. ?????}????? ??
  14. ????? return ? $count ;????? ??
  15. }????? ??
  16. ??? ??
  17. //截取字符串字串-GBK?(PHP)????? ??
  18. function ?gb_substr( $str ,? $len ){????? ??
  19. ????? $count ?=?0;????? ??
  20. ????? for ( $i =0;? $i strlen ( $str );? $i ++){????? ??
  21. ????????? if ( $count ?==? $len )? break ;????? ??
  22. ????????? if (preg_match( "/[\x80-\xff]/" ,? substr ( $str ,? $i ,?1)))?++ $i ;????? ??
  23. ???????????++ $count ;????????????? ??
  24. ?????}????? ??
  25. ????? return ? substr ( $str ,?0,? $i );????? ??
  26. }????? ??
  27. ??? ??
  28. //统计字符串长度-UTF8?(PHP)????? ??
  29. function ?utf8_strlen( $str )?{????? ??
  30. ????? $count ?=?0;????? ??
  31. ????? for ( $i ?=?0;? $i ? strlen ( $str );? $i ++){????? ??
  32. ????????? $value ?=?ord( $str [ $i ]);????? ??
  33. ????????? if ( $value ?>?127)?{????? ??
  34. ????????????? $count ++;????? ??
  35. ????????????? if ( $value ?>=?192?&&? $value ? $i ++;????? ??
  36. ????????????? elseif ( $value ?>=?224?&&? $value ? $i ?=? $i ?+?2;????? ??
  37. ????????????? elseif ( $value ?>=?240?&&? $value ? $i ?=? $i ?+?3;????? ??
  38. ????????????? else ? die ( 'Not?a?UTF-8?compatible?string' );????? ??
  39. ?????????}????? ??
  40. ????????? $count ++;????? ??
  41. ?????}????? ??
  42. ????? return ? $count ;????? ??
  43. }????? ??
  44. ??? ??
  45. ??? ??
  46. //截取字符串-UTF8(PHP)????? ??
  47. function ?utf8_substr( $str , $position , $length ){????? ??
  48. ????? $start_position ?=? strlen ( $str );????? ??
  49. ????? $start_byte ?=?0;????? ??
  50. ????? $end_position ?=? strlen ( $str );????? ??
  51. ????? $count ?=?0;????? ??
  52. ????? for ( $i ?=?0;? $i ? strlen ( $str );? $i ++){????? ??
  53. ????????? if ( $count ?>=? $position ?&&? $start_position ?>? $i ){????? ??
  54. ????????????? $start_position ?=? $i ;????? ??
  55. ????????????? $start_byte ?=? $count ;????? ??
  56. ?????????}????? ??
  57. ????????? if (( $count - $start_byte )>= $length )?{????? ??
  58. ????????????? $end_position ?=? $i ;????? ??
  59. ????????????? break ;????? ??
  60. ?????????}????????? ??
  61. ????????? $value ?=?ord( $str [ $i ]);????? ??
  62. ????????? if ( $value ?>?127){????? ??
  63. ????????????? $count ++;????? ??
  64. ????????????? if ( $value ?>=?192?&&? $value ? $i ++;????? ??
  65. ????????????? elseif ( $value ?>=?224?&&? $value ? $i ?=? $i ?+?2;????? ??
  66. ????????????? elseif ( $value ?>=?240?&&? $value ? $i ?=? $i ?+?3;????? ??
  67. ????????????? else ? die ( 'Not?a?UTF-8?compatible?string' );????? ??
  68. ?????????}????? ??
  69. ????????? $count ++;????? ??
  70. ??? ??
  71. ?????}????? ??
  72. ????? return ( substr ( $str , $start_position , $end_position - $start_position ));????? ??
  73. }????? ??
  74. ??? ??
  75. //判断是否是有韩文-UTF-8?(JavaScript)????? ??
  76. function ?checkKoreaChar(str)?{????? ??
  77. ????? for (i=0;?i
  78. ????????? if (((str.charCodeAt(i)?>?0x3130?&&?str.charCodeAt(i)?0x318F)?||?(str.charCodeAt(i)?>=?0xAC00?&&?str.charCodeAt(i)?
  79. ????????????? return ?true;????? ??
  80. ?????????}????? ??
  81. ?????}????? ??
  82. ????? return ?false;????? ??
  83. }????? ??
  84. ??? ??
  85. //判断是否有中文字符-GBK?(JavaScript)????? ??
  86. function ?check_chinese_char(s){????? ??
  87. ????? return ?(s.length?!=?s.replace(/[^\x00-\xff]/g, "**" ).length);????? ??
  88. }???

?

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文件)

$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 "您输入的[".$str."]含有违法字符";??
??? }
??? else
??? {
??????? echo "您输入的[".$str."]完全合法,通过!";??
??? }
}
?>


输入字符(数字,字母,汉字,下划线):
???
???


GBK:

preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312汉字字母数字下划线正则表达式

?


$str="aaa";
if(!eregi("[^\x80-\xff]","$str"))
{
echo "是";
}
else
{
echo "不是";
}
?>



$str = "中国";
echo $str;
echo "


";

//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 "没有中文";
}

?

?

?

?

?

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1674
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
counta和count的區別 counta和count的區別 Nov 20, 2023 am 10:01 AM

Count函數用於計算指定範圍內數字的個數。它忽略文字、邏輯值和空值,但會將空白儲存格計算在內,Count函數只計算包含實際數字的儲存格數量。而CountA函數用於計算指定範圍內非空單元格的個數。它不僅計算包含實際數字的儲存格,還計算包含文字、邏輯值和公式等非空白儲存格的數量。

五個精選的Go語言開源項目,帶你探索科技世界 五個精選的Go語言開源項目,帶你探索科技世界 Jan 30, 2024 am 09:08 AM

在現今科技快速發展的時代,程式語言也如雨後春筍般湧現。其中一門備受矚目的語言就是Go語言,它以其簡潔、高效、並發安全等特性受到了許多開發者的喜愛。 Go語言以其強大的生態系統而著稱,其中有許多優秀的開源專案。本文將介紹五個精選的Go語言開源項目,帶領讀者一起探索Go語言開源專案的世界。 KubernetesKubernetes是一個開源的容器編排引擎,用於自

Laravel開發:如何使用Laravel Echo和Pusher實現WebSockets通訊? Laravel開發:如何使用Laravel Echo和Pusher實現WebSockets通訊? Jun 13, 2023 pm 05:01 PM

Laravel是一個流行的PHP框架,具有高度可擴展性和高效性,它提供了許多強大的工具和程式庫,讓開發者可以快速建立高品質的網路應用程式。其中,LaravelEcho和Pusher是兩個非常重要的工具,透過它們可以輕鬆實現WebSockets通信,本文將詳細介紹如何在Laravel應用程式中使用這兩個工具。什麼是WebSockets? WebSockets

市面上最流行的golang框架有哪些? 市面上最流行的golang框架有哪些? Jun 01, 2024 pm 08:05 PM

目前最受歡迎的Go框架有:Gin:輕量級、高效能的Web框架,簡潔易用。 Echo:快速、高度可自訂的網路框架,提供高效能路由和中介軟體。 GorillaMux:快速、靈活的多工器,提供進階路由設定選項。 Fiber:效能最佳化的高效能Web框架,處理高並發請求。 Martini:物件導向設計的模組化網路框架,提供豐富的功能集。

PHP中echo關鍵字的作用與使用方法詳解 PHP中echo關鍵字的作用與使用方法詳解 Jun 28, 2023 pm 08:12 PM

PHP中echo關鍵字的作用和使用方法詳解PHP是一種廣泛使用的伺服器端腳本語言,它在網頁開發中被廣泛應用。而echo關鍵字是在PHP中用來輸出內容的一種方法。本文將詳細介紹echo關鍵字的作用與使用方法。作用:echo關鍵字的主要作用是將內容輸出到瀏覽器。在網頁開發中,我們需要將資料動態地呈現到前端頁面上,這時就可以使用echo關鍵字將資料輸出到頁面上。 e

Go語言開發必備:5個熱門框架推薦 Go語言開發必備:5個熱門框架推薦 Mar 24, 2024 pm 01:15 PM

《Go語言開發必備:5個熱門框架推薦》Go語言作為一門快速、高效的程式語言,受到越來越多開發者的青睞。為了提高開發效率,優化程式碼結構,許多開發者選擇使用框架來快速建立應用。在Go語言的世界中,有許多優秀的框架可供選擇。本文將介紹5個熱門的Go語言框架,並提供具體的程式碼範例,幫助讀者更好地理解和使用這些框架。 1.GinGin是一個輕量級的Web框架,擁有快速

探索Go語言框架:5個不容錯過的選擇! 探索Go語言框架:5個不容錯過的選擇! Feb 19, 2024 pm 02:29 PM

Go語言作為一種快速、高效的程式語言,一直受到程式設計師的青睞。在Go語言的生態系統中,框架扮演著至關重要的角色,幫助開發者更快速地建立應用程式。本文將介紹五個Go語言框架,讓你了解其特點和用法。 1.Gin框架Gin框架是一個輕量級的Web框架,具有快速、高效能的特性。使用Gin框架可以快速建立RESTfulAPI和Web應用程式。以下是一個簡單的範例程式碼:

使用Golang的Web框架Echo框架實現分散式任務調度 使用Golang的Web框架Echo框架實現分散式任務調度 Jun 24, 2023 am 11:49 AM

隨著網路的發展與資訊科技的進步,大數據時代已經來臨,數據分析、機器學習等領域也得到了廣泛的應用。在這些領域中,任務調度是一個不可避免的問題。如何實現高效的任務調度,對於提高效率至關重要。在本篇文章中,將介紹如何使用Golang的Web框架Echo框架實現分散式任務調度。一、介紹Echo框架Echo是一個高效能、可伸縮、輕量級的GoWeb框架。它基於HTT

See all articles