1

顧客がフルネームを入力するフォームからテキストボックスの値を取得しています。

つまり、テキストボックスに自分の名前を入力すると、値が送信FirstNameされ、変数に格納されます。LastName$_POST$name

現在、データベースには 2 つのフィールドがあり、1 つはfirst_nameで、もう 1 つは ですlast_name

last_nameにスペースを含む値が含まれることはありません。

例: するDoe DoeことはできDoeません。

フィールドと同様にfirst_name、スペースを使用できます。たとえば、ユーザー名はJohnまたはJohn Mennon.

first_nameしたがって、mysql テーブル フィールドJohn Mennonにがあり、 であると言えlast_nameますDoe

ユーザーがこの値を として入力するとJohn Mennon Doe、スペースの後の最後の値を ie として取得し、すべてを ie のままにしたいと考えていlast_nameます。Doefirst_nameJohn Mennon

という変数に保存されている送信された値からこれら2つの値を取得するにはどうすればよい$nameですか?

これらの値を取得した後、mysql データベースとは別に両方を照合し、ユーザーに他の仕事をさせます。

4

4 に答える 4

6
$parts = explode(' ', trim($_POST['name']));
$lastName = array_pop($parts);
$firstName = implode(' ', $parts);
于 2012-04-01T10:38:02.763 に答える
2

他の回答はあなたの問題に対する正しい技術的解決策を提供しますが、誰もベストプラクティスについて言及していません.

ベスト プラクティスは、人の名前について憶測をしないことです。私の名前が「ヴィンセント・ヴァン・ゴッホ」だったら?私の姓と名はどうやってわかりますか? ええと...できません。同じ問題を提起する「王子」(アーティスト)と呼ばれることもできます...

私が引き継いだソフトウェアでこの問題に何度も遭遇した後、私は二度とこの間違いを犯さず、常に名前を 1 つのフィールドとしてデータベースに保存することにしました。

検索には違いはありません (MySQL 全文検索を使用しているか、Solr を使用しているかに関係なく)。ユーザーのニックネームを表示したい場合は、ユーザーに尋ねるだけです!

于 2012-04-01T14:52:53.527 に答える
1

strrpos を使用して文字列内のスペースの最後のインデックスを取得し、次に substr を使用して first_name と last_name を取得できます

strrpos の良い例はhttp://php.net/manual/en/function.strrpos.phpにあります。

于 2012-04-01T10:40:33.263 に答える
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」のような接頭辞は小文字で書かれると想定しました。そのため、姓の直前にある小文字で始まる名前の部分はすべて接頭辞と見なされ、姓に含まれます。

たとえば、Denise Monique van Outenと に分割されDenise Moniqueますvan Outen

于 2012-04-01T10:46:15.340 に答える