2011-12-21 115 views
2

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

我也知道这是可能的阶段,但我正在寻找一个正则表达式1班轮,以保持我的代码清洁,简单和最重要:快速。

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

  • 名称
  • 名称surename
  • 名称奥布莱恩
  • 名称surename secondarysurname
  • 名称surename-surnametwo
  • N. Surename

但我不想让名字如下:

  • 名称(双空格键)
  • 名称 - surename(双负)
  • 名称 - ”(只是废话)

好吧,我想你明白我的意思,什么我不想让。

我只想使用a-zA-Z和 - 。 ' 我认为这是我需要允许的唯一事情。 - 。 '符号只能在一个词之间或之后使用一次。由于像'名字奥布莱恩'这样的名字不存在。

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

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

我希望有人知道很多正则表达式,并愿意帮助我。因为此刻..我卡住了:(

由于提前,

Jelmer

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

+7

这是一个可怕的想法更好的方法。有很多人物可能出现在名字中,你目前排除在外。 åäöüñç...名字不规则。 – 2011-12-21 22:51:21

+4

@DavidHedlund:的确如此。另见[Falsehoods程序员相信名称](http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/)。 – 2011-12-21 22:53:09

+0

谢谢您的评论。我知道我也必须允许这些。 (我自己的名字有一个ö),但首先我只需要对如何完成这个的基本理解:)但是你有什么想法该怎么做? – Jelmer 2011-12-21 22:54:04

回答

0

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

  1. 简单
  2. 清洁
  3. 快速

选两个。

除此之外,我保证一个单线这个复杂的将永远不会干净。把它分解成正则表达式变量并且大胆地评论它。稍后,你会很感激你做到了!当你在它的时候,把它变成一个通用名称验证器类,你可以重用。虽然Perl可能会被专家彻底摧毁成为完全不圣洁的东西,但当我们遵循我们在其他更结构化语言中遵循的礼貌和清洁的相同法则时,美感往往会出现。

TL; DR:不要把它作为一行代码。请。

0

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

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

UPDATE:继承人根据@Tim建议下

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

太好了。所以'Joe'-O-'-'合格,但是'Wil​​liam Henry Gates III'烧坏了你的CPU。 – 2011-12-21 23:08:30

+1

如果我的评论太神秘了,请阅读这篇关于[灾难性回溯]的文章(http://www.regular-expressions.info/catastrophic.html)。 – 2011-12-21 23:15:39

+0

你甚至读过我的评论:“这不是BULLETPROOF,但应该给你一个提示”(提示 - 一条有用的建议或实际建议) – jambriz 2011-12-22 23:14:46