JavaScript正则表达式有效名称

时间:2012-02-25 15:30:41

标签: javascript regex

我想创建一个检查有效名称的JavaScript正则表达式。

  • 最少2个字符(空间不能计算)
  • space zh允许一些特殊字符(éàëä ...)

我知道怎么写一些单独但不合并。

如果我使用/^([A-Za-z éàë]{2,40})$/,则用户可以输入2个空格作为名称

如果我使用/^([A-Za-z]{2,40}[ éàë]{0,40})$/,用户必须先使用2个字母,使用空格或特殊字符后,不能再使用字母。

搜索了一下,但很难为我的问题制定搜索字符串。有什么想法吗?

6 个答案:

答案 0 :(得分:10)

请,请相当,不要这样做。你只会告诉他们他们的名字无效,最终会让人感到不安。您的计划会拒绝的几个姓氏示例:O'NeillSø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

这将允许:

  • Li Huang Wu
  • CevahirÖzgür
  • YiğitAydın
  • FinlayÞunorBoivin
  • JosuéMikkoNorris
  • Tatiana Zlata Zdravkov
  • Ariadna Eliisabet O'Taidhg
  • sergej lisette rijnders
  • BRIANA NORMINA HAUPT
  • BihOtZ AmON Pavlov
  • Eoghan Murdo Stanek
  • Filimena J. Van Der Veen
  • d。布莱尔华莱士

允许:

  • Shirley24
  • 66Bryant Hunt88
  • http://stackoverflow.com
  • laoise_ibtihaj
  • hippolyte@example.com
  • Cy4n 4ur0r4 Blyth3 3ll1
  • Justisne
  • 丹尼

如果名称需要大写,大写,小写,修剪或单行,这是格式化程序应该执行的任务,而不是用户。

答案 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语句中使用它之前将其转义(如果你有的话)