我想创建一个检查有效名称的JavaScript正则表达式。
éàëä
...)我知道怎么写一些单独但不合并。
如果我使用/^([A-Za-z éàë]{2,40})$/
,则用户可以输入2个空格作为名称
如果我使用/^([A-Za-z]{2,40}[ éàë]{0,40})$/
,用户必须先使用2个字母,使用空格或特殊字符后,不能再使用字母。
搜索了一下,但很难为我的问题制定搜索字符串。有什么想法吗?
答案 0 :(得分:10)
请,请相当,不要这样做。你只会告诉他们他们的名字无效,最终会让人感到不安。您的计划会拒绝的几个姓氏示例:O'Neill
,Sørensen
,Юдович
,李
。试图涵盖所有这些案件和更多案件注定要失败。
做这样的事情:
在JavaScript中,它看起来像:
name = name.replace(/^\s+/, "").replace(/\s+$/, "").replace(/\s+/, " ");
if (name == "") {
// show error
} else {
// valid: maybe put trimmed name back into form
}
答案 1 :(得分:4)
大多数解决方案都没有考虑可能存在的许多不同名称。可能只有两个字符的名称,如 Al 或 Bo ,或者有人写下他的名字,如 F.中间名姓氏。
此RegExp
将验证大多数名称,但您可以将其优化为您想要的任何名称:
/^[a-z\u00C0-\u02AB'´`]+\.?\s([a-z\u00C0-\u02AB'´`]+\.?\s?)+$/i
这将允许:
但不允许:
如果名称需要大写,大写,小写,修剪或单行,这是格式化程序应该执行的任务,而不是用户。
答案 2 :(得分:2)
我想提出一个RegEx,它将所有基于拉丁语的语言与其特殊字符匹配:
/\A([ áàíóúéëöüñÄĞİŞȘØøğışÐÝÞðýþA-Za-z-']*)\z/
P.S。我已经包含了我能找到的所有角色,但如果我错过了任何角色,请随时编辑答案。
答案 3 :(得分:1)
为什么不
var reg= /^([A-Za-z]{2}[ éàëA-Za-z]*)$/;
2个字母,然后是你想要的空格,字母或特殊字符。
我不会在用户名中允许空格 - 当你有像
这样的用户名时,它会遇到麻烦ab ba
谁会记得他们使用了多少个空格?
答案 4 :(得分:1)
你可以这样做:
/^([A-Za-zéàë]{2,40} ?)+$/
2-40个字符,然后可选择一个空格,至少重复一次。这将允许最后一个空格,但你可以单独修剪它。
答案 5 :(得分:0)
在“修剪”输入值之后,以下内容将仅针对拉丁文姓氏计算您的请求。
rn = new RegExp("([\w\u00C0-\u02AB']+ ?)+","gi");
m = ln.match(rn);
valid = (m && m.length)? true: false;
请注意,我使用的是“+”,而不是“{2,}”,因为有些姓氏在单独的单词中仅使用一个字母,例如“Ortega y Gasset”
你可以看到我没有使用RegExp.test,这是因为该方法无法正常工作(我不知道为什么,但它具有很高的失败率,你可能会看到它here:
在我的国家,来自非拉丁语国家的人通常会对他们的名字进行一些翻译,因此以前的RegExp就足够了。但是,如果您尝试匹配世界上的任何姓氏,您可以添加更多范围的\ u ####字符,避免包含符号,数字或其他类型。或者xregexp库可能对您有所帮助。
而且,请不要忘记测试服务器端的输入,并在sql语句中使用它之前将其转义(如果你有的话)