这是Javascript Regular Expression to attempt to split name into Title/First Name(s)/Last Name
的延续我有first_name&我的数据库中的last_name和用户可以按照设计输入他的全名。它是一个输入字段,可以以任何格式输入名称 e.g。
等
现在的问题是, 1.如何立即验证名称,正则表达式? 2.如何将其处理为first_name和last_name。我可以使用JS或PHP
是否有为此目的制定的任何特定规则?
答案 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
成为有效的姓名字符。
答案 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
}