gpt4 book ai didi

javascript - 重音字符(变音符号)的具体 JavaScript 正则表达式

转载 作者:IT王子 更新时间:2023-10-29 02:39:24 26 4
gpt4 key购买 nike

我查看了 Stack Overflow(replacing characters.. ehhow JavaScript doesn't follow the Unicode standard concerning RegExp 等),并没有真正找到“JavaScript 如何匹配重音字符(带有变音符号的字符)”这个问题的具体答案?

我强制 UI 中的字段匹配格式:last_name, first_name (last [comma space] first),我想为变音符号,但显然在 JavaScript 中它比其他语言/平台更难一些。

这是我的原始版本,直到我想添加变音符号支持:

/^[a-zA-Z]+,\s[a-zA-Z]+$/

目前我正在讨论添加支持的三种方法中的一种,我已经测试并使用了所有这些方法(至少在某种程度上,我真的不知道第二种方法的“程度”是什么)。他们在这里:

明确列出所有我想接受的有效重音字符(蹩脚且过于复杂):


var accentedCharacters = "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ";
// Build the full regex
var regex = "^[a-zA-Z" + accentedCharacters + "]+,\\s[a-zA-Z" + accentedCharacters + "]+$";
// Create a RegExp from the string version
regexCompiled = new RegExp(regex);
// regexCompiled = /^[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+,\s[a-zA-ZàèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇßØøÅåÆæœ]+$/
  • 这会将姓氏/名字与 accentedCharacters 中任何受支持的重音字符正确匹配。

我的另一种方法是使用 . 字符类,以获得更简单的表达式:

var regex = /^.+,\s.+$/;
  • 这几乎可以匹配任何东西,至少是以下形式:something, something。没关系,我想...

最后一种方法,我刚刚found可能更简单...

/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
  • 它匹配一系列 Unicode 字符 - 经过测试和工作,虽然我没有尝试任何疯狂的东西,只是我在我们的语言部门看到的教职员工姓名的正常内容。

这是我的担忧:

  1. 第一个解决方案的局限性太大,草率且复杂。如果我忘记了一两个字符,就需要更改它,这不太实用。

  2. 第二个解决方案更好、更简洁,但它可能比实际匹配的要多得多。我找不到任何关于确切 . 匹配的真实文档,只是“除换行符之外的任何字符”的概括(来自 MDN 上的表格) .

  3. 第三个解决方案似乎是最精确的,但是有什么陷阱吗?我对 Unicode 不是很熟悉,至少在实践中是这样,但是看着 code table/continuation of that table , \u00C0-\u017F 似乎相当可靠,至少对于我预期的输入而言是这样。

  • 教职员工不会以他们的母语(例如,阿拉伯语、中文、日语等)提交带有他们名字的表格,所以我不必担心超出拉丁字符集的字符

这三种方法中哪一种最适合这项任务?或者有更好的解决方案吗?

最佳答案

接受所有重音的更简单的方法是:

[A-zÀ-ú] // accepts lowercase and uppercase characters
[A-zÀ-ÿ] // as above, but including letters with an umlaut (includes [ ] ^ \ × ÷)
[A-Za-zÀ-ÿ] // as above but not including [ ] ^ \
[A-Za-zÀ-ÖØ-öø-ÿ] // as above, but not including [ ] ^ \ × ÷

参见 Unicode Character Table 对于按数字顺序列出的字符。

关于javascript - 重音字符(变音符号)的具体 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20690499/

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