2011-05-25 2 views
0

Я ищу регулярное выражение в PHP, которое может сделать для меня следующее:Как я могу проверить поле имени, чтобы разрешить только одно пространство, и начинать и заканчивать буквой в PHP?

У меня есть поле имени для имени человека. Я хотел бы позволить человеку фактически ввести два имени в поле имени. Каждое имя должно начинаться с заглавной буквы, заканчиваться буквой и, если необходимо, может включать в себя одиночную кавычку или тире. Между именами допускается одно пространство. Следующие имена были бы приемлемы:

Стивен О'Рейли
Джеймс Дин Петерсон
Джеймс-Дин Петерсон
Джеймс Дин-Петерсона

Два имени в первом поле имя не требуется, но это было бы допустимо. Вот регулярное выражение, я играл с:

if(!preg_match('/^[A-Z][a-z-]+[a-z]+([\s][A-Z][a-z-]+[a-z])?$/', $fname)) 

Это позволяет мне иметь два названия в поле, которые начинаются с заглавной буквы, а в конце строчной. Это также позволяет мне иметь тире (-), но я не могу заставить его дать одну цитату ('). Он также допускает множественные пробелы в конце имен, если нет других букв. Я могу устранить это с помощью функции trim(), так что неважно, но если бы я мог сделать ее недействительной с регулярным выражением, это было бы здорово.

В любом случае, может ли кто-нибудь предлагать регулярное выражение, которое позволяет одинарные кавычки, и делает любые пробелы после того, как последнее письмо не разрешено?

+1

Хотя это возможно, для ваших бедных пользователей это очень громоздко. Например, вы можете получить имена во всех кепках. – stefgosselin

+0

Но при текущем регулярном выражении они не могут вводить имя all-caps. На сайте также содержится подробная информация о том, что можно и не может ввести. Я верю, что люди знают, как правильно называть свое имя. –

+0

Я согласен с stefgosselin - на самом деле нет причин делать это подробное регулярное выражение на имени - вы почти наверняка встретите кого-то, кто не будет проверять это сравнение, и .. вы делаете их заглавные буквы ???Для этого и нужен PHP. – Dave

ответ

1

Хотя полная проверка регулярных выражений возможна, делать это так больно для вас и громоздко для ваших бедных пользователей. Вы можете получить имена во всех шапках, например. Я всегда одобряю подход сохранения имени пользователя в db как есть, и на выходе, отформатируйте его так, как я хочу. В вашем случае это может выглядеть примерно так:

$name = 'john doe'; 

$fullname = htmlspecialchars(trim(explode(" ", $name), ENT_QUOTES)); 

$firstName = ucfirst($fullname[0]); 
$lastName = ucfirst($fullname[1]); 

Это всего лишь смутное представление о том, как я подхожу к этому.

Чтобы обрезать строку с регулярным выражением, это может помочь вам тоже:

//Trim whitespace (including line breaks) at the start and the end of the string 
    preg_replace("\A\s+|\s+\z", "", $text); 

Для ваших цитат, скажем, вы хотите, чтобы как одинарные или двойные кавычки, этот блок [ ' "] соответствует на котировки добавить в своем регулярном выражении, чтобы соответствовать только один раз в любом месте после второй буквы, для . Например

+0

спасибо. Я не рассматривал такой подход. Я ценю ваш ответ. –

0

для тех, кто может столкнуться с этой проблемой, я обнаружил мой вопрос. регулярное выражение стоит, но нужно несколько дополнительных символов.

if(!preg_match('/^[A-Z][a-z-\']+[a-z]+([\s][A-Z][a-z-\']+[a-z])?$/', $fname)) 

Единственное, что я не делал, - это удалить косые черты из переменной $ fname, прежде чем проверять ее. Итак, просто используйте функцию stripslashes() для вашей переменной, а затем проверьте ее на это. Чтобы устранить дополнительные пробелы (если они есть), просто используйте trim(). Достаточно просто.

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