我已经研究了StackOverflow替换字符。eh,JavaScript如何不遵循有关RegExp的Unicode标准等),还没有真正找到问题的具体答案:
How can JavaScript match for accented characters (those with diacritical marks)?
我正在强制UI中的字段匹配以下格式:(last_name, first_name 最后一个[逗号空间]首先) ,并且我想提供对变音符号的支持,但是显然在JavaScript中,它比其他语言/平台要难一些。
last_name, first_name
这是我的原始版本,直到我想添加变音符号支持:
/^[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,在实践中至少,但看着码表 / 该表的延续,\u00C0-\u017F似乎是非常稳固,至少在我的预期输入。
\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 [ ] ^ \ × ÷