gpt4 book ai didi

regex - 使用 UTF-8 编码的多语言输入验证

转载 作者:行者123 更新时间:2023-12-04 17:04:59 24 4
gpt4 key购买 nike

要检查用户输入的英文名称是否有效,我通常会将输入与正则表达式(例如 [A-Za-z])进行匹配。但是,如果 utf8 编码需要多语言(如中文、日语等)支持,我该怎么做?

最佳答案

您可以近似 Unicode 派生属性 \p{Alphabetic}非常简洁地与 [\pL\pM\p{Nl}]如果您的语言不直接支持正确的 Alphabetic 属性。

不要使用 Java 的 \p{Alpha} , 因为 that’s ASCII-only .

但是随后您会注意到您没有考虑破折号( \p{Pd} 或 DashPunctuation 有效,但是 不是 包括大多数连字符!),撇号(通常但不总是 U 之一) +27、U+2BC、U+2019 或 U+FF07)、逗号或句号/句点。

你可能最好包括 \p{Pc} ConnectorPunctuation,以防万一。

如果您有 Unicode 派生属性 \p{Diacritic} ,您也应该使用它,因为它包括诸如加泰罗尼亚语中双生 L 所需的中点以及人们有时使用的变音符号的非组合形式。

但是你会发现人们在他们的名字中使用序数的方式是 \p{Nl} (LetterNumber) 不能容纳,所以你抛出 \p{Nd} (DecimalNumber) 甚至所有 \pN (数)混入。

然后你意识到亚洲名字通常需要使用 ZWJ 或 ZWNJ 才能在他们的脚本中正确书写,所以你必须添加 U+200D 和 U+200C,它们都是 \p{Cf} (Format) 字符,实际上也是 JoinControl 字符。

当你完成时 looking up the various Unicode properties对于不断出现的各种异国情调的人物——或者当你你已经完成了——你几乎肯定会得出结论,如果你只是允许他们使用他们希望的任何 Unicode 字符作为他们的名字,你会在这方面做得更好,如 the link Tim cites建议。是的,你会遇到一些 clown ,比如“əɯɐuʇƨɐ⅂ əɯɐuʇƨɹᴉℲ”,但这只是与领土有关,你不能以任何合理的方式排除愚蠢的名字。

关于regex - 使用 UTF-8 编码的多语言输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4323386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com