【问题标题】:PHP : Japanese character validation : Why Hiragana characters validated against regular expression of Katakana characters?PHP:日文字符验证:为什么平假名字符针对片假名字符的正则表达式进行验证?
【发布时间】:2015-04-24 19:10:14
【问题描述】:

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

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

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";

标签: php regex validation utf-8 preg-match


【解决方案1】:

就像我在评论中所说,您需要打开 unicode 修饰符 u。并且注意当你在处理 unicode 字符时,你必须要启用 unicode 修饰符u

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 在提出问题 1 年后,我不想测试此代码,提供可以验证 OP 所需输出的信息。
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多