2015-10-16 108 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没有理清我的意思,对此我很感激。 –