我正在尝试创建一个正则表达式,只过滤英语和日语中的字母或数字。这就是我尝试过的,
preg_match('/(?![\n\r])[\x00-\x1F\x80-\xFF][^\x4e00-\x9fa0)]/u', $value)
但我没有得到理想的结果。我可能做错了什么?
答案 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