2015-10-16 35 views
-4

我似乎無法弄清楚這一點......我承認我沒有及時更新新的東西。我正在使用eregi_replace,但將其切換爲preg_replace並添加了分隔符。現在它不能正常工作。preg_match正則表達式來拆分firstname,姓氏

我有一個表單中的字段發送到表單驗證器,並且錯誤信息讓用戶知道哪些字段丟失;即「名,姓,密碼等」。該錯誤需要顯示爲「名字或姓氏」,基本上增加一個空格並在名稱中使用N進行大寫。

有人能指出我做錯了什麼嗎?

這是用來工作:

$r .= ucwords(eregi_replace("_", " ", $c)); 

這就是我把它改爲:

$r .= ucwords(preg_replace("/_/", " ", $c)); 

現在,他們只是顯示爲FirstnameLastname但我想他們顯示爲First NameLast Name

+0

您還沒有表現出你的輸入數據的任何例子。請顯示一些示例輸入,以及實際輸出與期望輸出的關係。 –

+0

'$ c'是缺少什麼字段的數組,例如'firstname','lastname',如果它們實際上缺失(沒有來自用戶的輸入)。實際產出與預期產出在最後一句中列出。我想我把它弄清楚了,或者不是? –

+0

不,對於我來說,無論如何,在沒有任何示例輸入的情況下,這一點並不清楚。顯然,輸入字符串必須包含下劃線。我猜下劃線用作分隔符,你想用空格替換它們嗎? –

回答

1

你好,可能是工作是這樣的:

<?php 

$c = array('Firstname', 'Lastname', 'password'); 

foreach($c as $field_name) 
{ 
    $r = ucwords(preg_replace("/name/i", " Name", $field_name)); 

    echo $r."<br>"; 
} 
+0

是的,確切地說。謝謝! –

0

你的問題和代碼並沒有表現出你是什麼之後。

$r .= ucwords(eregi_replace("_", " ", $c)); 

決不會發現name,就是尋找一個下劃線,並用空格代替它。

這就是爲什麼

preg_replace("/_/", " ", $c); 

你沒有工作。這是一個正確的轉換,但正則表達式正在解決錯誤的問題。鑑於上述答案高於另一種方法,因爲不需要正則表達式,因此會是str_ireplace

$c = array('Firstname', 'Lastname', 'password'); 
foreach($c as $field_name) { 
    $r = ucwords(str_ireplace("name", " Name", $field_name)); 
    echo $r."\n"; 
} 

演示:https://eval.in/452283

+0

這就是爲什麼它會令人困惑...因爲之前的代碼使用'eregi_replace'工作。我不明白爲什麼。無論哪種方式,我的預期結果都已經制定和解釋。 @Monomachus沒有理清我的意思,對此我很感激。 –