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

标签 javascript regex unicode

我查看了 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/

相关文章:

javascript - 使用 Angular UI 路由器突出显示事件嵌套状态

javascript - 如何在deferred.then中的ajax之后提交表单

Javascript 全局匹配与捕获组

php - 如何在Android中使用PHP从数据库MySQL获取表情符号

phpMyAdmin 不会在数据库中正确显示 Unicode (utf-8) 字符,但在 Web 中正确显示

javascript - 如何从 html select 中删除选定的选项?

javascript - 将类对象传递给 javascript 上下文 Objective-C

带有 json 数据的文本的 PHP 正则表达式

regex - MongoDB $regex 查询和潜在利用

iphone - 如何在 Objective C 中将 unicode 转义码转换为字符(在 iPhone 上)