2015-02-23 76 views
2

我想驗證用戶的輸入是否全寬片假名字符或不?PHP:日本字符驗證:爲什麼平假名驗證針對片假名字符正則表達式?

下面是一組日文字符根據類別

http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml

現在看看下面的代碼,我試圖驗證,不同的輸入

$pattern包含了所有全寬片假名字符

header('Content-Type: text/html; charset=utf-8'); 
     $pattern = "/^([゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ]+)$/"; 
     $values = array("ナカ" , 
         "ね", 
         "PHP", 
         "ナカPHP", 
         ); 

     foreach ($values as $value){ 
      echo $value. " => "; 
      if(preg_match($pattern, $value)){ 
       echo "valid"; 
      }else{ 
       echo "invalid"; 
      } 
      echo "<br>"; 
     } 
$values陣列

第一值是有效的全寬kataka na,第二個是平假名,第三個和第四個是無效的條目。

我得到下面的輸出。

ナカ => valid 
ね => valid 
PHP => invalid 
ナカPHP => invalid 

值得關注的是,爲什麼平假名字符驗證,這個問題存在很多反對平假名字符,而需要的是隻有全寬片假名

在此先感謝。

+0

您需要打開unicode修飾符。 – 2015-02-23 12:59:16

+0

'「/ ^([゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ·ーヽヾヿ] +)$/U「;' – 2015-02-23 12:59:38

回答

2

就像我說在我的評論,你需要打開unicode的修改u。並且請注意,當您處理unicode字符時,您必須啓用unicode修飾符u

$pattern = "/^([゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ]+)$/u"; 
                                         ^
+1

由於阿維納什..這是P_E_R_F_E_C_T :) 1問這個問題的一年 – 2015-02-23 13:07:41

-2

對於我的答案。我將定義任何文本

$partten = '/^([\x{30A0}-\x{30FF}]+)$/u'; 
preg_match($partten, $values); 
+0

後,我無意對此進行測試代碼,提供可驗證OP所需輸出的信息。 – Xorifelse 2016-11-17 03:16:10

相關問題