Я хотел бы создать регулярное выражение, которое проверяет имя человека. Они должны быть разрешены:
-
Это довольно просто создать регулярное выражение. Проблема в том, что некоторые люди также используют специальные символы в своих именах. Например, предположите пользователя с именем gûnther или François. Существует множество персонажей, таких как û и ç, и их сложно перечислить.
Есть ли простой способ проверить правильные имена людей?
Есть ли простой способ проверить правильные имена людей?
Это обсуждалось несколько раз. Я вполне уверен, что единственное, что люди могут договориться, это то, что для того, чтобы существовать, имя не может быть пустой строкой, таким образом:
^.+$
(Да, я знаю, что это, вероятно, не то, что ищет OP. Я просто подытоживаю более ранние вопросы и ответы).
/^\pL[\pL '-]*\z/
должен делать трюк
Короткий ответ – нет, нет простого способа. Вы затронули самую большую проблему. Есть так много особых случаев акцентов и лишних вещей, висящих в письмах, что это будет беспорядок, с которым нужно иметь дело. Кроме того, выражение с разбивкой на что-то вроде этого
^[CAPITAL_LETERS][ALL_LETERS_AND_SYMBOLS]*$
Это не так полезно, потому что «Abcd» соответствует этому, и вы не можете узнать, кто-то неправильно вводит информацию в поле, или если это был сумасшедший голливудский родитель, который на самом деле назвал своего ребенка тем или иным, как сэндвич или зонтик.
^.+$
Проверено ответ @jensgram, но это регулярное выражение принимает только все строки, поэтому оно не решает проблему, потому что строка должна быть именем, в этом случае это может быть что угодно.
^([AZ]{1})[az]+$
Мое регулярное выражение принимает только строку, где первый символ имеет верхний регистр, а следующие символы – буквы в нижнем регистре. Также просматривая другие ответы, это, кажется, кратчайшее регулярное выражение, а также самое простое.
Я не знаю точно, что вы пытаетесь сделать (подтвердите ввод имени пользователя?), Но в основном я бы оставил его простым – не удалось проверить, содержит ли текст цифры. И даже это, вероятно, довольно шаткий.
У меня такая же проблема. Сначала я придумал что-то вроде
preg_match("/^[a-zA-Z]{1,}([\s-]*[a-zA-Z\s\'-]*)$/", $name))
но затем понял, что символы UTF-8 таких стран, как Швеция, Китай и т. д., например, Õ å, не будут разрешены, что важно для моего сайта, поскольку это международный сайт, и не хотят принуждать пользователей не входить в их реальную имя.
Я, хотя это может быть проще, вместо того, чтобы пытаться выяснить, как разрешить такие имена, как О'Мэлли и Брукс-Шнайдер и Õsmar (сделал это :), чтобы скорее поймать символы, которые вы не хотите, чтобы они вошли. Для меня было в основном избегать ввода кода xss JS. Поэтому я использую следующее регулярное выражение для фильтрации всех символов, которые могут быть вредными.
preg_match("/[~!@#\$%\^&\*\(\)=\+\|\[\]\{\};\\:\",\.\<\>\?\/]+/", $name)
Таким образом, они могут ввести любое имя, которое они хотят, за исключением символов, которые на самом деле не являются частью какого-либо имени. Надеюсь, это может быть полезно.