中文的簡單正則匹配


  在PHP中使用正則匹配中文,很多時候會出現問題,在不同的編碼情況下,正則表達式不太一樣,所以希望大家注意,在使用正則匹配中文的時候,多多注意編碼問題。
  
  在JS下能夠使用的在PHP中不一定可以使用,比如:/^[a-zA-Z0-9\_\.\_\.\u4E00-\u9FA5\uF900-\uFA2D]+$/;
  
  如果在PHP中使用 :\u4E00-\u9FA5\uF900-\uFA2D 來匹配,那么會在運行PHP腳本的時候出現錯誤,
  
  Warning: preg_match(): Compilation failed: PCRE does not support \L, \l, \N, \P, \p, \U, \u, or \X at offset 6
  
  那是因為:PHP正則表達式中不支持下列 Perl 轉義序列:\L, \l, \N, \P, \p, \U, \u, or \X
  
  但是在在 UTF-8 模式下,允許用“\x{...}”,花括號中的內容是表示十六進制數字的字符串,一下給出了一個簡單的中文匹配示例:

     //匹配中文、英文字符、數字、特殊符號全角除外
    $str  = 'adf^^**^k2)(*&3423sfdgsdf#$%^423jkalk阿拉丁解放路dsfj';
    $rule = "/([\x80-\xff]{1,})/";
    echo "<pre>";
    preg_match_all("/([?=[\x21-\x7e]{1,}|[A-Za-z0-9]{1,}|[\x{4e00}-\x{9fa5}]{1,})/u", $str, $m);
    var_dump($m);
 
    //支持特殊符號(半角)
    $rule = "/((?=[\x21-\x7e])[^A-Za-z0-9]){1,}/u";
    preg_match($rule, $str, $m);
    var_dump($m);
 
    //匹配中文····
    $str = "erwerwe.·中文·匹配·324#¥%……";
    $rule = "/([\x{4e00}-\x{9fa5}\·]{1,})/ius";
    preg_match($rule, $str, $m);
    var_dump($m);
 
    //匹配郵件
    $email ="qwerty234234@234567_#$%@yahoo.cn";
    //$email = "bieru52@aliyun.com";
    $rule = "/(^[a-zA-Z0-9][a-zA-Z0-9\.\_\-]{1,30}@[a-zA-Z0-9_-]{1,10}(\.[a-zA-Z0-9_-]{1,10}){0,4})\.[a-zA-Z]{1,10}$/";
    $m = preg_match($rule, $email);
    var_dump($m);

  

雙字節字符編碼范圍 

GBK (GB2312/GB18030) 
x00-xff GBK雙字節編碼范圍 
x20-x7f ASCII 
xa1-xff 中文 gb2312 
x80-xff 中文 gbk 

 UTF-8 (Unicode) 

u4e00-u9fa5 (中文) 

 

參考文檔: 正則表達式30分鍾入門教程 

轉自:http://dreameng.blog.51cto.com/1187899/1429580

正則表達式 非常全面:http://www.php100.com/manual/unze/5.htm

 

((?=[\x21-\x7e]+)[^A-Za-z0-9]) 我用的是D7 RegExpr 報錯,為什么?

http://q.cnblogs.com/q/67038/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM