【问题标题】:PHP regex to accept Japanese and english languagesPHP 正则表达式接受日语和英语语言
【发布时间】:2018-11-08 05:09:07
【问题描述】:

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

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

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

【问题讨论】:

  • 能否请您详细说明您在做什么?匹配单词,删除字符,还是验证整个字符串?您能否提供一两个具有预期结果的示例字符串?仅供参考,任何 Unicode 字母都可以与 \p{L} 匹配,任何数字都可以与 \p{N} 匹配,或者您可以使用 '~[\p{L}\d]~u' 匹配任何 Unicode 字母或数字。
  • “期望的结果”是什么?
  • 我猜这是使用正则表达式“只会加倍麻烦”的情况之一。 Manu,请解释一下你在做什么。
  • 请看here,我觉得这真的很有帮助。

标签: php regex laravel


【解决方案1】:

你应该使用unicode character properties 你也可以看看这个网站,其中包含一些其他的正则表达式示例http://www.localizingjapan.com/blog/2012/01/20/regular-expressions-for-japanese-text/

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

这个正则表达式应该符合你的期望:

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

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

如果您不匹配单个单词,您可能需要在接受的字符中添加单词分隔符

【讨论】:

  • Japanese writing system 使用三个字母:汉字、平假名和片假名。 PCRE 似乎不支持汉字。
  • 我承认我不太了解日文书写系统...感谢您提供有关三个字母的附加信息
  • @ÁlvaroGonzález 看这里localizingjapan.com/blog/2012/01/20/… 似乎支持所有三个字母
  • 为什么在这里使用(?![\n\r])
  • 您不需要(?![\n\r]),因为它用于限制更通用的模式。例如。 (?![\n\r])\s 匹配除 CR 和 LF 符号之外的任何空格。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2013-11-18
    • 2011-01-31
    相关资源
    最近更新 更多