PHP正则表达式接受日语和英语

时间:2018-05-29 13:54:18

标签: php regex laravel

我正在尝试创建一个正则表达式,只过滤英语和日语中的字母或数字。这就是我尝试过的,

preg_match('/(?![\n\r])[\x00-\x1F\x80-\xFF][^\x4e00-\x9fa0)]/u', $value)

但我没有得到理想的结果。我可能做错了什么?

2 个答案:

答案 0 :(得分:1)

你应该使用unicode character properties 您也可以在本网站上查看其他一些正则表达式示例http://www.localizingjapan.com/blog/2012/01/20/regular-expressions-for-japanese-text/

根据@ÁlvaroGonzález关于三个字母的通知更新了字符列表。

这个正则表达式应该按照你的期望做到:

preg_match('/[\p{L}\p{N}\p{Katakana}\p{Hiragana}\p{Han}]+/u', $value)

\p{L}将匹配任何字母,\p{N}任意数字,\p{Katakana}将匹配任何片假名字符等...

如果您不匹配单个单词

,则可能需要在接受的字符中添加单词分隔符

答案 1 :(得分:0)

以下正则表达式检查该行不是日语:

if(!preg_match('/^[\x{3041}-\x{3096}\x{30a1}-\x{30fc}\x{4e00}-\x{9faf}]+$/u', $line)){
    // ...
}

您可以在文档中找到更多信息: https://www.w3.org/International/questions/qa-forms-utf-8.html