本文目錄一覽:
- 1、PHP中當前文件為GBK或GB2312編碼,怎麼用正則表達式取漢字
- 2、PHP正則匹配漢字和半形逗號,開頭和結尾禁止半形逗號、禁止連續兩個半形逗號。自己沒知道OK的,就不要答了
- 3、php正則匹配中文亂碼問題
- 4、求個正則表達式,PHP下匹配2-15位英文數字下劃線中文,但是數字不能開頭
- 5、PHP正則表達式驗證是否含有中文
- 6、正則表達式如何只匹配一個中文字元
PHP中當前文件為GBK或GB2312編碼,怎麼用正則表達式取漢字
if (ereg(‘/[\u4E00-\u9FA5]/’,$str)){
$chn = str_replace(‘/[^\u4E00-\u9FA5]/’,”, $str);
}
判斷是否有中文,$chn=過去非中文字元
PHP正則匹配漢字和半形逗號,開頭和結尾禁止半形逗號、禁止連續兩個半形逗號。自己沒知道OK的,就不要答了
匹配漢字其實與編碼有關係的,UTF8的正則與GBK的正則就會有差別。
我按你的要求改了一個在UTF-8編碼下匹配的,但還沒達到禁止連續兩個半形逗號的要求。你可以先看看,看看有沒有啟發。
$str = “漢,中國,人,字”;
if (preg_match(“/^[^,][\x{4e00}-\x{9fa5},]+[^,]$/u”,$str)) {
print(“合法”);
} else {
print(“不合法”);
}
============
如果未能解決兩個半形逗號的問題,其他樓主也可以降低一下要求,分兩次處理。第一次先替換掉雙半解逗號為一個,再使用正則來匹配。
能解決問題是關鍵,方法可以再優化,對不?
php正則匹配中文亂碼問題
當然亂碼啦,一個漢字在php里是三個字元,你這樣直接用.去匹配任意字元的話,三個.才等於一個漢字。你把一個漢字給截取掉了,當然亂碼了,不信你把你的0,10改成0,11。就不亂碼的,而且只匹配出兩個漢字。漢字不是這樣去匹配的,有專門匹配漢字的正則,
求個正則表達式,PHP下匹配2-15位英文數字下劃線中文,但是數字不能開頭
/^[\\u4e00-\\u9fa5_a-zA-Z][\\u4e00-\\u9fa5\\w]{1,14}$/
不需要轉義的話就把\\改成\
\x80-\xff這個的編碼是GBK
\\u4e00-\\u9fa5這個編碼是UTF-8
不知道是不是這個原因
PHP正則表達式驗證是否含有中文
判斷是否有中文。
if (preg_match(“/[\x7f-\xff]/”, $string)) { echo “true”; }else{ echo “false”; }判斷是否全部是中文
//if (preg_match(“/^[“.chr(0xa1).”-“.chr(0xff).”]+$/”, $str)) { //只能在GB2312情況下使用 if (preg_match(“/^[\x7f-\xff]+$/”, $str)) { //兼容gb2312,utf-8
echo “true”;
} else {
echo “false”;
}
判斷中文和編碼有關 gbk是雙位元組,utf8是三位元組,可以根據中文的範圍來判斷
編碼範圍1. GBK (GB2312/GB18030)
/x00-/xff GBK雙位元組編碼範圍
/x20-/x7f ASCII
/xa1-/xff 中文
/x80-/xff 中文
2. UTF-8 (Unicode)
/一-/龥 (中文)
/x3130-/x318F (韓文
/xAC00-/xD7A3 (韓文)
/u0800-/一 (日文)
ps: 韓文是大於[/龥]的字元
正則例子:
preg_replace(“/([/x80-/xff])/”,””,$str);
preg_replace(“/([一-龥])/”,””,$str);
希望可以採納,謝謝。
正則表達式如何只匹配一個中文字元
php中匹配一個或多個中文字元(包含簡體和繁體中文字元)的正則表達式如下:/[[b]\x{4e00}-\x{9fa5}]+/注意:php中正則表達式的16進位是以
\x
開頭的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/272395.html