PHP : 日语字符验证 : 为什么要根据片假名字符的正则表达式验证平假名字符?

PHP : Japanese character validation : Why Hiragana characters validated against regular expression of Katakana characters?

我想验证用户的输入是否为 全角片假名 个字符?

这是一组按类别分类的日文字符

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 数组中的第一个值是有效的全角片假名,第二个是平假名,第三个和第四个是无效条目。

我得到以下输出。

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

关注的是为什么平假名字符会被验证,这个问题存在于许多平假名字符中,而只需要 全角片假名

提前致谢。

正如我在评论中所说,您需要打开 unicode 修饰符 u。请注意,当您处理 unicode 字符时,您必须启用 unicode 修饰符 u.

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

我的回答。我将为任何文本定义

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