2012-04-01 53 views
1

我從表單獲取文本框的值,客戶輸入他的全名。如何確定表單處理過程中的後處理空間?

所以這是FirstNameLastName,現在,當他在值通過$_POST發送和獲取存儲在一個變量$name文本框inputes他/她的名字。

現在我的數據庫中有兩個字段,一個是first_name,另一個是last_name

last_name不會包含任何包含空格的值。

例如:它不能是Doe Doe,它只能是Doe

如在first_name字段中,允許空格,例如用戶名可以是JohnJohn Mennon

因此我們可以說我們在mysql表字段John Mennonlast_nameDoefirst_name

現在,當用戶輸入這個值作爲John Mennon Doe,我想以後空格作爲我last_nameDoe的最後一個值,並保持所有是我first_nameJohn Mennon

如何從存儲在名爲$name的變量中的提交值中獲取這兩個值?

由於獲取這些值後,我將它們分別與mysql數據庫匹配,並讓用戶完成其他工作。

+2

我不認爲這是一個好主意,將整個名稱分爲任意「第一」和「最後」 - http://www.japan-guide.com/e/e2271.html – Aprillion 2012-04-01 10:41:08

+1

如果丹尼斯麪包車Outen想註冊? – MichaelRushton 2012-04-01 10:44:18

+0

您可能想接受爲您工作的答案。 – Basti 2012-04-01 11:46:26

回答

6
$parts = explode(' ', trim($_POST['name'])); 
$lastName = array_pop($parts); 
$firstName = implode(' ', $parts); 
+0

謝謝:) :) – 2012-04-01 10:41:50

+0

如果我的名字是「Vincent van Gogh」呢?這將存儲我的名字爲「Vincent van」,而我的姓氏爲「Gogh」,這是不正確的...查看我的回答:http://stackoverflow.com/a/9965312/786814 – jmlnik 2012-04-01 14:54:17

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 

我認爲像「麪包車」的前綴,將小寫字母寫成。因此,姓名前以小寫字母開頭的任何名字部分都被視爲prexix,並將包含在姓氏中。

例如Denise Monique van Outen將被分成Denise Moniquevan Outen

+0

假設是所有人的根源邪惡。這將在許多情況下失敗(包括但不限於使用大寫字母)。看看爲什麼這不是一個好方法在這裏:http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – jmlnik 2012-04-01 14:58:59

+0

這正是OP所要求的。 「假設是萬惡之源。」多麼毫無意義的說法。我們無法解決所有問題,因此我們需要創建一些暗示讓其他人知道我們正在解決哪些子問題。順便說一句,這些OP的assumtions,不是我的。你爲什麼要把這個發佈到這個答案而不是OP的問題上? – Basti 2012-04-01 16:44:56

+0

[「過早優化是所有邪惡的根源」](http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize)伊莫,假設也是如此;就我個人而言,我認爲這對整個行業和社區來說是件壞事。我在你的回答下張貼了你的答案,因爲你寫了_「我認爲那些像'van'這樣的前綴應該是小寫字母」_「。正如你會注意到的,我試圖在每個答案下指出我認爲是不好的方法,而不僅僅是你的方法。 – jmlnik 2012-04-02 00:09:40

2

雖然其他答案爲您的問題提供了正確的技術解決方案,但沒有人提及最佳實踐。

最佳做法是到avoid making assumptions about people's names。如果我的名字是「Vincent van Gogh」呢?你怎麼知道我的名字是什麼,我的姓是什麼?那麼......你不能。我也可以稱爲「王子」(藝術家),這引發了同樣的問題...

在遇到這個問題很多次,我接管了軟件,我決定永遠不會再犯這個錯誤,並始終在我的數據庫中將名稱存儲爲一個字段。

對於搜索(無論是使用MySQL全文搜索還是使用Solr),沒有任何區別,並且如果要顯示用戶的暱稱,只需向他們詢問暱稱即可!

+0

我認爲這可能是根教訓,我會照顧它..謝謝:) – 2012-04-02 05:44:54