我强制 UI 中的字段匹配格式:last_name, first_name (last [comma space] first) ,并且我想提供对变音符号的支持,但显然在 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]+$/
以下是我的担忧:
第一个解决方案过于局限,而且草率且令人费解。如果我忘记了一个或两个字符,就需要更改它,这不是很实用。
第二种解决方案更好、更简洁,但它可能比实际应该匹配的要多得多。我找不到任何真正匹配的文档 ,.只是“除换行符之外的任何字符”的概括(来自MDN上的表)。
第三种解决方案似乎是最精确的,但有什么陷阱吗?至少在实践中,我对 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 [ ] ^ \ × ÷
有关按数字顺序列出的字符,请参阅 Unicode 字符表 。