仅使用preg_match接受UTF8字母

时间:2012-03-22 19:06:01

标签: php regex preg-match

我试图允许中文,日文(平假名,片假名,汉字),韩文,以及基本上任何unicode信。我希望第一个字符成为一个字母

$pattern = '/\p{L}[\p{L}\p{N} _.-]+/u';
if(!preg_match($pattern, $subuser)){
    //Error
}

然而,我的模式似乎接受前面带数字的字符串。当我添加:

'/^\p{L}[\p{L}\p{N} _.-]+$/u'

没有接受任何字符串。我尝试过使用\ p {Hiragana}等,但没有真正的运气。有人看到我做错了吗?

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题:

<?php

$lines = array('12345', 'w123', 'hello');

$valid = array_filter($lines, function($line){
  return preg_match('/^\p{L}{1,}/iu', $line);
});

var_dump($valid);

答案 1 :(得分:1)

卫生方面的圣杯:http://htmlpurifier.org/ 它清理所有数据,只允许utf-8字符通过。 一些建议的字符阅读:http://htmlpurifier.org/docs/enduser-utf8.html