当前位置: 首页 > 面试题库 >

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

闾丘文昌
2023-03-14
问题内容

我已经研究了StackOverflow替换字符。eh,JavaScript如何不遵循有关RegExp的Unicode标准等),还没有真正找到问题的具体答案:

How can JavaScript match for accented characters (those with diacritical marks)?

我正在强制UI中的字段匹配以下格式:(last_name, first_name 最后一个[逗号空间]首先)
,并且我想提供对变音符号的支持,但是显然在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。我想那没关系…

我刚刚发现的最后一种方法可能更简单…

/^[a-zA-Z\u00C0-\u017F]+,\s[a-zA-Z\u00C0-\u017F]+$/
  • 它与一系列unicode字符匹配-经过测试和正常工作,尽管我没有做任何疯狂的事情,只是我在语言部门中看到的用于教师姓名的普通内容。

这是我的担忧:

  1. 第一个解决方案太过局限了,因此草率而令人费解。如果我忘了一个或两个字符,就需要更改它,但这不是很实际。
  2. 第二种解决方案更好,更简洁,但是它可能比实际需要的匹配得多。我找不到任何实际的文件究竟是什么.比赛,(在从表中“任何除换行符字符”的只是概括MDN。
  3. 第三种解决方案似乎是最精确的,但是有什么陷阱吗?我不是很熟悉的Unicode,在实践中至少,但看着码表 / 该表的延续,\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 [ ] ^ \ × ÷


 类似资料:
  • 我已经研究了堆栈溢出(替换字符...呃,JavaScript如何不遵循有关RegExp的Unicode标准等等),但还没有找到这个问题的具体答案: 目前,我正在讨论三种添加支持的方法中的一种,所有这些方法我都进行了测试和工作(至少在某种程度上,我不知道第二种方法的“范围”是什么)。它们在这里: 这将使姓/名与中支持的任何重音字符正确匹配。 这与任何东西都是匹配的,至少以的形式是这样的。好吧,我想.

  • 我看了Stack Overflow(替换字符...呃,JavaScript如何不遵循有关RegExp的Unicode标准等),但还没有真正找到“JavaScript如何匹配重音字符(带有变音符号的字符)”这个问题的具体答案? 我正在强制UI中的字段匹配格式:(最后[逗号空间]第一),我想提供对变音符号的支持,但显然在JavaScript中它比其他语言/平台更难。 这是我的原始版本,直到我想添加变音

  • 问题内容: 我正在尝试查找带有重音符号的数据。我已经试过了: 而且有效。它查找XML数据字段包含where的所有记录。问题在于它仅将大写字母E与重音符匹配。我试图编写一个更通用的查询,以使用对等类查找带有重音元音(a,e,i,o,u,大写和小写以及任何重音)的所有数据。我想要一个正则表达式 仅 匹配重音元音,但是我不确定如何获取它,因为等价类(例如匹配 所有 e的(带或不带有重音))都可以。 另外

  • 问题内容: 如何从字符串中删除重音符号?尤其是在IE6中,我有类似以下内容: 但是IE6困扰着我,似乎不喜欢我的正则表达式。 问题答案: 使用ES2015 / ES6 String.Prototype.Normalize(), 这里发生两件事: 根据Unicode规范形式,将组合的字形分解为简单的字形。在中端起来表示为+ 。 现在,使用正则表达式字符类来匹配U + 0300→U + 036F范围,

  • 问题内容: 我有一个单词列表,我必须输出其中没有元音的单词数量。我到目前为止 我更担心reg表达式是错误的。 问题答案: 这对我有用: 另外,您应该小写字符串,而不是表达式:

  • 我试图为密码字段创建一个验证,它只允许字符和 时有什么区别,以及哪些字符来自