php日语全角半角正则表达式验证

来源:互联网 发布:mac os x lion 下载 编辑:程序博客网 时间:2024/05/17 05:56
  1. <pre name="code" class="php"><pre name="code" class="php">/** 
  2.  * 全角を半角にする 
  3.  * @param    string $instr 変換前文字列 
  4.  * @return    string 変換後文字列 
  5. */  
  6. function zen2han($instr) {  
  7.     $flag = FALSE;            //直前文字が全角カタカナならTRUE  
  8.     $len = mb_strlen($instr);  
  9.     $ofst = 1;  
  10.     $outstr = '';  
  11.   
  12.     for ($ofst = 0; $ofst < $len$ofst++) {  
  13.         $ch = mb_substr($instr$ofst, 1);  
  14.         if ($ch == 'ー') {  
  15.             if ($flag)    $outstr .= 'ー';                    //カタカナの長音記号  
  16.             else        $outstr .= $ch;  
  17.         } else if (mb_ereg_match('[ァ-ヶ]+'$ch)) {    //カタカナの範囲  
  18.             $outstr .= mb_convert_kana($ch'k');  
  19.             $flag = TRUE;  
  20.         } else if (mb_ereg_match('[0-9]+'$ch)) {    //全角数字の範囲  
  21.             $outstr .= mb_convert_kana($ch'n');  
  22.             $flag = TRUE;  
  23.         } else if (mb_ereg_match('[A-Z]+'$ch)) {    //全角英字の範囲  
  24.             $outstr .= mb_convert_kana($ch'r');  
  25.             $flag = TRUE;  
  26.         } else if (mb_ereg_match('[ぁ-ん]+'$ch)) {    //ひらがなの範囲  
  27.             $flag = TRUE;  
  28.             $outstr .= mb_convert_kana($ch'h');  
  29.         } else {  
  30.             $outstr .= $ch;  
  31.             $flag = FALSE;  
  32.         }  
  33.     }  
  34.     return $outstr;  
  35. }  
  36.     /** 
  37.      *  全角のみチェック 
  38.      * @param $value 
  39.      *     [0]: 項目名<br> 
  40.      *     [1]: value<br> 
  41.      *     [2]: エラーコード<br> (必要ではない) 
  42.      */  
  43.     function EC_FULL_ONLY_CHECK($value) {  
  44.         if (isset($this->arrErr[$value[0]])) {  
  45.             return;  
  46.         }  
  47.         $this->createParam($value);  
  48.         // 値  
  49.         $str = $this->arrParam[$value[1]];  
  50.         //全角  
  51.         for($i = 0; $i < mb_strlen($str, CHAR_CODE); $i++) {  
  52.             if ((ord(mb_substr($str$i, 1, CHAR_CODE)) < 128) || preg_match("/^[ヲ-゚ー]+$/u"$str)) {  
  53.                 // エラーコードがある場合  
  54.                 //$this->arrErr[$value[1]] = "※ " . $value[0] . "は全角文字を入力してください。<br />";  
  55.                 $this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage(VALIDATION_STRING_TYPE_ZENKAKU, $value[0]);  
  56.                 break;  
  57.             }  
  58.         }  
  59.     }  
  60.   
  61.     /** 
  62.      * 1半角数字英字文字以上のチェック(EC用) 
  63.      * 
  64.      * @param $value 
  65.      *     [0]: 項目名<br> 
  66.      *     [1]: value<br> 
  67.      */  
  68.     function EC_HALF_NUMBER_ENG_CHECK($value) {  
  69.         if(isset($this->arrErr[$value[1]])) {  
  70.             return;  
  71.         }  
  72.         $this->createParam($value);  
  73.         // 値  
  74.         $str = $this->arrParam[$value[1]];  
  75.         if(preg_match("/^[a-zA-Z]+$/"$str)) {  
  76.             //$this->arrErr[$value[1]] = "※ " . $value[0] . "${0}は${1}を含む${2}文字以上を入力してください。<br />";  
  77.             $this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage (VALIDATION_COMMON_STRING_NOTCONTAIN, array($value[0],'半角英字或るは半角数字',1));  
  78.         } else if (preg_match("/^[0-9]+$/"$str)) {  
  79.             //$this->arrErr[$value[1]] = "※ " . $value[0] . "${0}は${1}を含む${2}文字以上を入力してください。<br />";  
  80.             $this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage (VALIDATION_COMMON_STRING_NOTCONTAIN, array($value[0],'半角英字或るは半角数字',1));  
  81.         } else if (!preg_match("/^[0-9a-zA-Z]+$/"$str)) {  
  82.             //$this->arrErr[$value[1]] = "※ " . $value[0] . "${0}は${1}を含む${2}文字以上を入力してください。<br />";  
  83.             $this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage (VALIDATION_COMMON_STRING_NOTCONTAIN, array($value[0],'半角英字或るは半角数字',1));  
  84.         }  
  85.     }  
  86.   
  87.     /** 
  88.      * 半角英数字のチェック 
  89.      * 
  90.      * @param $value 
  91.      *     [0]: 項目名<br> 
  92.      *     [1]: value<br> 
  93.      */  
  94.     function EC_HALF_ENG_AND_NUM_CHECK($value) {  
  95.         if(isset($this->arrErr[$value[1]])) {  
  96.             return;  
  97.         }  
  98.         $this->createParam($value);  
  99.         ifstrlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[0-9a-zA-Z]+$/"$this->arrParam[$value[1]])) {  
  100.             //$this->arrErr[$value[1]] = "※ " . $value[0] . "は半角英数字で入力してください。<br />";  
  101.             $this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage(VALIDATION_STRING_TYPE_ALNUM, $value[0]);  
  102.         }  
  103.     }  
  104.   
  105.   
  106.     /** 
  107.      * 半角英数カナのチェック 
  108.      * 
  109.      * @param $value 
  110.      *     [0]: 項目名<br> 
  111.      *     [1]: value<br> 
  112.      */  
  113.     function EC_HALF_ENG_NUM_KANA_CHECK($value) {  
  114.         if(isset($this->arrErr[$value[1]])) {  
  115.             return;  
  116.         }  
  117.         $this->createParam($value);  
  118.         ifstrlen($this->arrParam[$value[1]]) > 0 && !preg_match("/^[0-9a-zA-Zァ-ヶヲ-゚ー]+$/u"$this->arrParam[$value[1]])) {  
  119.             //$this->arrErr[$value[1]] = "※ " . $value[0] . "は半角英数カナ文字を入力してください。<br />";  
  120.             $this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage(VALIDATION_STRING_TYPE_HANKAKUKANA_ALNUM, $value[0]);  
  121.         }  
  122.     }  
  123.   
  124.   
  125.     /** 
  126.      * メールアドレス形式の判定 
  127.      * 
  128.      * @param array $value 各要素は以下の通り。<br> 
  129.      *     [0]: 項目名<br> 
  130.      *     [1]: 判定対象を格納している配列キー 
  131.      * @return void 
  132.      */  
  133.     function EC_EMAIL_CHECK( $value ){  
  134.         if(isset($this->arrErr[$value[1]])) {  
  135.             return;  
  136.         }  
  137.   
  138.   
  139.         $this->createParam($value);  
  140.   
  141.   
  142.         // 入力がない場合処理しない  
  143.         if (strlen($this->arrParam[$value[1]]) === 0) {  
  144.             return;  
  145.         }  
  146.   
  147.   
  148.         $wsp           = '[\x20\x09]';  
  149.         $vchar         = '[\x21-\x7e]';  
  150.         $quoted_pair   = "\\\\(?:$vchar|$wsp)";  
  151.         $qtext         = '[\x21\x23-\x5b\x5d-\x7e]';  
  152.         $qcontent      = "(?:$qtext|$quoted_pair)";  
  153.         $quoted_string = "\"$qcontent*\"";  
  154.         $atext         = '[a-zA-Z0-9!#$%&\'*+\-\/\=?^_`{|}~]';  
  155.         $dot_atom_text = "$atext+(?:[.]$atext+)*";  
  156.         $dot_atom      = $dot_atom_text;  
  157.         $local_part    = "(?:$dot_atom|$quoted_string)";  
  158.         $domain        = $dot_atom;  
  159.         $addr_spec     = "${local_part}[@]$domain";  
  160.   
  161.   
  162.         $dot_atom_loose   = "$atext+(?:[.]|$atext)*";  
  163.         $local_part_loose = "(?:$dot_atom_loose|$quoted_string)";  
  164.         $addr_spec_loose  = "${local_part_loose}[@]$domain";  
  165.   
  166.   
  167.         if (RFC_COMPLIANT_EMAIL_CHECK) {  
  168.             $regexp = "/\A${addr_spec}\z/";  
  169.         } else {  
  170.             // 携帯メールアドレス用に、..や.@を許容する。  
  171.             $regexp = "/\A${addr_spec_loose}\z/";  
  172.         }  
  173.   
  174.   
  175.         if (!preg_match($regexp$this->arrParam[$value[1]])) {  
  176.             //$this->arrErr[$value[1]] = "※ " . $value[0] . "の形式が不正です。<br />";  
  177.             $this->arrErr[$value[1]] = SC_Utils_Ex::sfGetMessage(VALIDATION_STRING_FORMATINVALID, $value[0]);  
  178.             return;  
  179.         }  
  180.   
  181.   
  182.         // 最大文字数制限の判定 (#871)  
  183.         $arrValueTemp = $value;  
  184.         $arrValueTemp[2] = 256;  
  185.         $this->MAX_LENGTH_CHECK($arrValueTemp);  
  186.     }  
  187. </pre><br>  
  188. <br>  
  189. <pre></pre>  
  190. <pre></pre>  
  191. <pre></pre>  
  192. <pre></pre>  
  193. <pre></pre>  
  194. <pre></pre>  
  195. <pre></pre>  
  196. </pre>  
0 0
原创粉丝点击