将好名字拆分为FIrst;姓

时间:2011-09-01 09:31:25

标签: php javascript regex database validation

这是Javascript Regular Expression to attempt to split name into Title/First Name(s)/Last Name

的延续

我有first_name&我的数据库中的last_name和用户可以按照设计输入他的全名。它是一个输入字段,可以以任何格式输入名称 e.g。

  • 博士。詹姆斯沃森
  • hilly billy
  • Sir Lorenzo Von Matterhorn

现在的问题是,  1.如何立即验证名称,正则表达式?  2.如何将其处理为first_name和last_name。我可以使用JS或PHP

是否有为此目的制定的任何特定规则?

3 个答案:

答案 0 :(得分:4)

命名人没有国际标准。但是,也许朝鲜人有一个:

Kim + level of devotion to the leader

人们可能有多个名字甚至多个姓氏。

即使在相同的文化中,名称的顺序也可能不同:http://en.wikipedia.org/wiki/Chinese_name(Western Chineses首先互换,最后符合英国惯例)。

有先生或先生等正式地址。

有无限组合的学术头衔:教授,博士,......,http://en.wikipedia.org/wiki/Title#Academic_titles

可以有代后缀(初级,高级):http://en.wikipedia.org/wiki/Junior_%28suffix%29#Generational_titles

世界上最大的名字是:

  

Adolph Blaine Charles David Earl Frederick Gerald Hubert Irvin John   Kenneth Lloyd Martin Nero Oliver Paul Quincy Randolph Sherman Thomas   Uncas Victor William Xerxes Yancy Zeus   Wolfeschlegelsteinhausenbergerdorffvoralternwarengewissenhaftschaferswessenschafewarenwohlgepflegeundsorgfaltigkeitbeschutzenvonangreifendurchihrraubgierigfeindewelchevoralternzwolftausendjahresvorandieerscheinenwanderersteerdemenschderraumschiffgebrauchlichtalsseinursprungvonkraftgestartseinlangefahrthinzwischensternartigraumaufdersuchenachdiesternwelchegehabtbewohnbarplanetenkreisedrehensichundwohinderneurassevonverstandigmenschlichkeitkonntefortplanzenundsicherfreuenanlebenslanglichfreudeundruhemitnichteinfurchtvorangreifenvonandererintelligentgeschopfsvonhinzwischensternartigraumen,   高级。

如果你的输入字段被限制到最大字符数,不用担心,这个人幸运的是有一个简短的名字:

  

沃尔夫+ 585,高级

在这种情况下,您不应忘记允许+585成为有效的姓名字符。

http://en.wikipedia.org/wiki/Wolfe%2B585,_Senior

答案 1 :(得分:1)

听起来像是家庭作业。在一般情况下似乎有疑问。见http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/

大多数网页表单都有名字,姓氏等等。如果很容易,他们就不会这样做。

尤达说:调用正则表达式!?下降你将陷入特殊情况。在为时已晚之前停止。

John Smith博士

约翰史密斯博士

John Smith,MD

John Smith博士

King James VI

詹姆斯六世,Blah Blah Blah的国王,信仰的捍卫者

Publius Cornelius Scipio Africanus

教皇本尼迪克特

本尼迪克特·阿诺德

Jim Pope

Theresa姐妹

特蕾莎修女

妈妈!@#$%^

Twisted Sister

马丁·路德·金博士牧师

Rev Dr Martin Luther King Jr

Martin Luther King博士,Jr

乔治·W·布什总统

w ^

Boy George

答案 2 :(得分:0)

这是一个棘手的问题,没有通用的解决方案 - 正如其他人所指出的那样。可能最好的方法是允许用户输入标题,名字和姓氏。但是,如果您确实需要进行解析,那么有一些简单的解决方案可能至少适用于最常见的名称格式。这是一个例子:

$name = "Dr. James Watson";

// Define the set of allowed titles
$titles = 'dr|dr\.|prof|prof\.|sir';

// If the name is composed of two words separated by a space, assume this is
// first and last name
if (preg_match('/^([[:alpha:]]+) ([[:alpha:]]+)$/', $name, $matches)) {
    $first_name = $matches[1];
    $last_name = $matches[2];
}
// If there are more than two parts, check if the first part is the title
elseif (preg_match('/^(' . $titles . ')? ?([[:alpha:]]+) ([[:alpha:] ]+)$/i', $name, $matches)) {
    $prefix = $matches[1];
    $first_name = $matches[2];
    $last_name = $matches[3];
}
else {
    // Name cannot be parsed
}