我想验证用户的输入是否为全宽片假名字符?
以下是根据类别
的一组日文字符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
数组中的第1个值是有效的全宽片假名,第2个是平假名,第3个和第4个是无效的条目。
我得到了以下输出。
ナカ => valid
ね => valid
PHP => invalid
ナカPHP => invalid
关注的是为什么平假名字符被验证,这个问题存在于许多平假名字符,而需要只有全宽KataKana
先谢谢。
答案 0 :(得分:2)
就像我在评论中所说,你需要打开unicode修饰符u
。请注意,当您处理unicode字符时,您必须启用unicode修饰符u
。
$pattern = "/^([゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ]+)$/u";
^
答案 1 :(得分:-2)
我的回答。我将为任何文本定义
$partten = '/^([\x{30A0}-\x{30FF}]+)$/u';
preg_match($partten, $values);