重音字符(变音符号)的具体JavaScript正则表达式
我已经查看了堆栈溢出(replacing characters.. eh、how JavaScript doesn't follow the Unicode standard concerning RegExp等)。)并且还没有真正找到问题的具体答案&JavaScript如何匹配重音字符(带有变音符号的字符)?&qot;
我强制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
。我想没问题的…
最后一种方法(我只是found)可能更简单.
/^[a-zA-Zu00C0-u017F]+,s[a-zA-Zu00C0-u017F]+$/
- 它与一系列Unicode字符匹配--经过测试并且工作正常,不过我并没有尝试任何疯狂的东西,只是我在我们语言系看到的教职员工姓名的正常内容。
以下是我的担忧:
第一个解决方案太过有限,而且草率而又令人费解。如果我忘了一两个字符,就需要更改,而这是不太实际的。
第二个解决方案更好、更简洁,但它可能比实际应该匹配的要多得多。我找不到关于与
.
完全匹配的的任何真正文档,只能找到除换行符";(来自MDN上的表)之外的任何字符的泛化。第三种解决方案似乎是最精确的,但是有什么问题吗?我不太熟悉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。
相关文章