正则表达式 - 名称验证

时间:2011-12-21 22:47:27

标签: regex expression

我正在寻找一个正则表达式来检查名字。我搜索了网络,并使用了StackOverflow在发布此问题时给出的建议。

我也知道它可以分阶段进行,但我正在寻找一个正则表达式1-liner来保持我的代码干净,简单和最重要:快速。

我需要什么: 一个正则表达式,用于在注册到我的站点时检查人员的姓名。我想允许名字为:

  • 名称
  • 名称surename
  • 姓名O'brian
  • 名称surename secondarysurname
  • 姓名surename-surnametwo
  • ñ。 Surename

但我不想允许名字为:

  • 名称(双空格键)
  • 名称 - surename(双减)
  • 姓名 - '(只是废话)

嗯,我想你明白我的意思和我不想允许的内容。

我只想使用a-zA-Z和 - 。 “ 我认为这是我唯一需要允许的东西。 - - 。 '符号只能在一个单词之间或之后使用一次。因为'name O''Brian'这样的名字不存在。

但是应该允许使用名称'name surename secondary-thirdsurname'。所以一个空格键和一个减号。

我想出了几个使用http://public.kvalley.com/regex/regex.asp和其他正则表达式程序的正则表达式。但我只是一个正则表达式的菜鸟。

我希望有人对正则表达非常了解,并愿意帮助我。因为此刻......我被困住了:(

提前致谢,

Jelmer

PS。如果您对我的问题有任何疑问。请问他们,因为我真的很想得到你的帮助!

2 个答案:

答案 0 :(得分:0)

一般的经验法则适用于编码的许多方面,尤其是正则表达式设计,您的代码可以是:

  1. 简单
  2. 清洁
  3. 快速
  4. 选择两个。

    除此之外,我保证这种复杂的单线永远不会干净。将其分解为正则表达式变量并对其进行自由评论。稍后,你会感激你的确!在您使用它时,将其转换为可以重用的通用名称验证器类。虽然Perl可以被专家们充分利用到一些完全不圣洁的东西中,但当我们遵循其他更结构化的语言中我们遵循的礼貌和清洁的相同法则时,它的美感常常会出现。

    TL; DR:不要让它成为单行。请。

答案 1 :(得分:0)

这不是防弹的,但应该给你一个正确方向的提示

([a-zA-ZáéíóúñÑ]+ ?'?-?)+

更新:根据@Tim的建议,这是一个更好的方法

([a-zA-ZáíóúñÑö]+( |'|-)?)+