我从表单中获取文本框值,客户输入其全名。
所以它是FirstName
和LastName
,现在当他在文本框中输入他/她的名字时,价值会通过$_POST
发送并存储在变量$name
中
现在我的数据库中有两个字段,一个是first_name
,另一个是last_name
。
last_name
永远不会包含任何包含空格的值。
例如:它不能Doe Doe
,只能是Doe
。
first_name
字段中的空格,允许使用空格,例如用户名可以是John
或John Mennon
。
因此我们可以说我们在mysql表字段中first_name
John Mennon
而last_name
为Doe
。
现在,当用户将此值输入为John Mennon Doe
时,我希望将空格后的最后一个值设为last_name
,即Doe
,并保持全部为first_name
,即John Mennon
。
如何从存储在名为$name
的变量中的提交值中获取这两个值?
在获得这些值之后,我将它们与mysql数据库分开匹配,让用户完成另一项工作。
答案 0 :(得分:6)
$parts = explode(' ', trim($_POST['name']));
$lastName = array_pop($parts);
$firstName = implode(' ', $parts);
答案 1 :(得分:2)
虽然其他答案为您的问题提供了正确的技术解决方案,但没有人提及最佳实践。
最佳做法是avoid making assumptions about people's names。如果我的名字是“Vincent van Gogh”怎么办?你怎么知道我的名字是什么,我的姓氏是什么?嗯......你做不到。我也可以称为“王子”(艺术家)引发同样的问题......
在我接手这个问题多次遇到这个问题后,我决定不再犯这个错误,并且总是将名字存储在我的数据库中。
搜索没有区别(无论您使用的是MySQL全文搜索还是Solr),如果您想为用户显示昵称,请向他们索取一个昵称!
答案 2 :(得分:1)
您可以使用strrpos获取字符串中的最后一个空间索引,然后使用substr获取first_name和last_name
strrpos的一个很好的例子是http://php.net/manual/en/function.strrpos.php
答案 3 :(得分:1)
喜欢正则表达式:
if (preg_match("~^((\w+\s*)+)\s+(\w+)$~", trim($_POST["name"]), $match))
{
$firstName = $match[1];
$lastName = $match[3];
}
else
; // invalid input format
我会单独询问用户他的名字和姓氏,因为解析它们通常非常棘手。
为了好玩,我添加了一些名称前缀检测:
if (preg_match("~^(([A-Z]\w+\s+)+)(([a-z]+\s+)?\w+)$~", trim($_POST["name"]), $match))
{
$firstName = trim($match[1]);
$lastName = $match[3];
}
else
// invalid input format
我认为像“van”这样的前缀将用小写字母书写。因此,以小写字母开头的姓氏之前的任何名称部分都被视为prexix,并将包含在姓氏中。
例如,Denise Monique van Outen
将分为Denise Monique
和van Outen
。