2015-10-16 3 views
-4

Я не могу понять это ... и я признаю, что я не в курсе новых вещей. Я использовал eregi_replace, но переключил его на preg_replace и добавил разделитель. Теперь он работает неправильно.preg_match regex to split firstname, lastname

У меня есть поля, которые находятся в форме, которые отправляются на валидатор формы, и сообщение об ошибке позволяет пользователю узнать, какие поля отсутствуют; то есть «имя, фамилия, пароль и т. д.». Ошибка должна отображаться как «Имя или Фамилия», в основном добавляя пробел и заглавные буквы N в имени.

Может кто-нибудь указать, что я делаю неправильно?

Это то, что используется для работы:

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

Это то, что я изменил его:

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

Теперь они просто показывают, как Firstname, Lastname, но я хотел бы их, чтобы показать, как First Name , Last 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 не имел проблемы, выясняя, что я имел в виду, за что я благодарен. –

Смежные вопросы