php正則表達式中文
A. 求一個php正則表達式匹配(字母、數字、漢字、下劃線)
<?php
$pat='#^([a-zA-Z]+|[0-9]+|[x{4e00}-x{9fa5}]+)$#u';
$s="你好";
var_mp(preg_match($pat,$s));
B. UTF-8正則表達式如何匹配漢字,utf-8正則表達式_PHP教程
判斷輸入內容是否含有違法字元,請看下面代碼
$str = "編程";
if(!preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$str))
{
echo "您輸入的[".$str."]含有違法字元";
}
else
{
echo "您輸入的[".$str."]完全合法,通過!";
}
-----------------------
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("/^[\x{4e00}-\x{9fa5}A-Za-z0-9_]+$/u",$str))
{
echo "您輸入的[".$str."]含有違法字元";
}
else
{
echo "您輸入的[".$str."]完全合法,通過!";
}
}
GBK:
代碼如下:
preg_match("/^[".chr(0xa1)."-".chr(0xff)."A-Za-z0-9_]+$/",$str); //GB2312漢字字母數字下劃線正則表達式
以上內容就是PHP中UTF-8正則表達式如何匹配漢字的全部內容,希望大家喜歡。
C. php 正則表達式 只能包含字母和數字
式子:/^[a-zA-Z0-9]+$/u
釋義:
(1)「/」:正則表達式的定義,固定的書寫形式;
(2)「^」:表示開始;
(3)「[]」:表示一個字元組,匹配包含的任何字元。例如,「[ab]」匹配「plain」中的「a」;
(4)「a-z」:與小寫字母a-z匹配的字母範圍;
(5)「A-Z」:表示與大寫字母A-Z匹配的字母範圍;
(6)「0-9」:匹配范圍為0-9的數字;
(7)「+」:表示匹配數為一個或多個;
(8)「$」:匹配輸入行的結尾。如果設置了RegExp對象的Multiline屬性,則$也匹配「 」或「 」之前的位置;
(9)「u」:最後一個u是模式修飾符,嚴格來說,它可以是預定義的常數。表示使用unicode進行匹配。
(3)php正則表達式中文擴展閱讀:
其它正則表達式符號的含義:
(1)「*」:與上一個子表達式匹配任意次。例如,zo*匹配「z」以及「zo」和「zoo」。*等效於{0,};
(2)「?」:匹配上一個子表達式零或一次。例如,「做(es)?」匹配「do」或「does」。?等效於{0,1};
(3)「{n}」:n是一個非負整數。匹配被確定n次。例如,「o{2}」不能與「Bob」中的「o」匹配,但是可以與「food」中的兩個o匹配;
(4)「{n,}」:n是一個非負整數。至少匹配n次。例如,「o{2,}」不能匹配「Bob」中的「o」,但是可以匹配「foooood」中的所有o。「o{1,}」等效於「o+」。「o{0,}」等效於「o*」;
(5)「 {n,m}」:m和n是非負整數,其中n <= m。 至少匹配n次,最多匹配m次。 例如,「 o {1,3}」將匹配「 fooooood」中的前三個o作為一個組,最後三個o作為一個組。 「 o {0,1}」等效於「 o?」。 請注意,逗號和兩個數字之間不能有空格。
D. 關於PHP里中文正則表達式的問題
剛才的不夠嚴謹,修改下:
/^[a-zA-Z_\x{4e00}-\x{9fa5}][\x{4e00}-\x{9fa5}\w]{2,11}$/u
解釋:
[a-zA-Z_\x{4e00}-\x{9fa5}] //第一位,必須非數字,但又要滿足其它條件
[\x{4e00}-\x{9fa5}\w]{2,11} //從第二位開始,必須滿足全部條件,長度為2到11位(加第一位就是3到12位啦)。
補充:
\x{4e00}-\x{9fa5}這個就是漢字的Unicode范圍。
一定不要忘記最後那個 u ,沒有這個修正符,就不能正常識別中文了
E. php正則表達式把西文雙引號替換成中文雙引號
我來解釋下2樓的代碼, preg_replace的第一個參數的正則,第二個參數是替換結果,第三個參數是要替換的字元串。
第一個參數'/"([^"]*)"/'的意思是匹配成對出現的雙引號內容,()代表引用,[^"]*代表引號內的內容,也就是一個不包含"的任意長度的字元串。
第二個參數'「${1}」'中的${1}使用了第一個參數中的第一個引用,也就是雙引號內的內容,所以第二個參數的意思就是將第一個參數的正則匹配到的英文雙引號內的內容放到了中文雙引號中。
解釋完畢。
F. php正則表達式匹配一段中文,中間有換行,空白,應該怎麼寫
有多種處理方法:
1、使用[sS]匹配任意字元,而不是使用「.」
2、使用s單行修飾模式,例:$pattern='#abc.*?def#s';//能匹配abc換行def
3、使用s*匹配換行和空格,php里s能匹配空白字元,含換行
php里的中文使用[x7f-xff]表示,因此,使用正則:
$pattern='#[x7f-xff]+(?:s*[x7f-xff]+)*#';即可
G. 求PHP 的正則表達式 大全
匹配中文字元的正則表達式: [\u4e00-\u9fa5] 評註:匹配中文還真是個頭疼的事,有了這個表達式就好辦了 匹配雙位元組字元(包括漢字在內):[^\x00-\xff] 評註:可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1) 匹配空白行的正則表達式:\n\s*\r 評註:可以用來刪除空白行 匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? /> 評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於復雜的嵌套標記依舊無能為 匹配首尾空白字元的正則表達式:^\s*|\s*$ 評註:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表達式 匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 評註:表單驗證時很實用 匹配網址URL的正則表達式:[a-zA-z]+://[^\s]* 評註:網上流傳的版本功能很有限,上面這個基本可以滿足需求 匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 評註:表單驗證時很實用 匹配國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7} 評註:匹配形式如 0511-4405222 或 021-87888822 匹配騰訊QQ號:[1-9][0-9]{4,} 評註:騰訊QQ號從10000開始 匹配中國郵政編碼:[1-9]\d{5}(?!\d) 評註:中國郵政編碼為6位數字 匹配身份證:\d{15}|\d{18} 評註:中國的身份證為15位或18位 匹配ip地址:\d+\.\d+\.\d+\.\d+ 評註:提取ip地址時有用 匹配特定數字: ^[1-9]\d*$ //匹配正整數 ^-[1-9]\d*$ //匹配負整數 ^-?[1-9]\d*$ //匹配整數 ^[1-9]\d*|0$ //匹配非負整數(正整數 + 0) ^-[1-9]\d*|0$ //匹配非正整數(負整數 + 0) ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮點數 ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配負浮點數 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮點數 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非負浮點數(正浮點數 + 0) ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(負浮點數 + 0) 評註:處理大量數據時有用,具體應用時注意修正 匹配特定字元串: ^[A-Za-z]+$ //匹配由26個英文字母組成的字元串 ^[A-Z]+$ //匹配由26個英文字母的大寫組成的字元串 ^[a-z]+$ //匹配由26個英文字母的小寫組成的字元串 ^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字元串 ^\w+$ //匹配由數字、26個英文字母或者下劃線組成的字元串 /http:\/\/(.*)\//i //匹配外部鏈接地址
滿意請採納