#regex #ruby
#регулярное выражение #ruby
Вопрос:
Я использую для проверки формата имен в своих приложениях rails. Мне нужно обновить его, чтобы он не принимал что-то вроде mike.jones
текущее регулярное выражение
/([A-Za-z ',.-] )/
допустимые имена
'Baxter',
'Doe de Sour Jr.',
'Smith-Brown',
"Mathias d'Arras",
"d'Arras",
'King, Jr.',
'Cotton III'
недопустимые имена
'Baxter2',
'user@gmail',
'#michael',
'tina.fay'
Комментарии:
1. А как насчет
Mr. Smith
илиJ. K. Rowling
?2. @CAustin Они должны быть действительными
3. @CarySwoveland Я видел другой ответ. Хотя принятый сбой в rubular , он передается в моих спецификациях .
4. @CarySwoveland Возможно, я скоро изменю ответ. В моей спецификации была проблема.
Ответ №1:
Ответ немного сложен, когда вам нужно учитывать периоды, которые встречаются в середине допустимых имен. Согласно вашему описанию, правило, похоже, заключается в том, что точки подходят, если за ними не следуют буквы. Это может быть достигнуто с помощью предварительного просмотра регулярных выражений:
^(?!.*.S)[A-Za-z ',.-] $
демонстрация: https://regex101.com/r/LkUl38/2
Комментарии:
1. @CarySwoveland Я не уверен, правда ли это. Что делать, если точка, за которой следует запятая, допустима, например?
2. @AntarrByrd — Звучит так, будто ты не знаешь, чего хочешь. Пожалуйста, отредактируйте свой ответ, чтобы указать, к какой категории, по вашему мнению, относится каждый из них:
P.A.
,P.A
,p.a.
,pa.
,p.a.
иPA.
3. @Addison Да, я это понял. Вот почему я удалил комментарий. Я пока исключу этот пример. Мне сложно понять, что действительно, поскольку мне не были даны четкие требования.
4. Антарр, вам просто нужно сделать предположение о том, что вам требуется, и соответствующим образом сформулировать свой вопрос. Это зависит от вас — мы не хотим об этом слышать. Примеры хороши для того, чтобы помочь читателям понять вопрос, но они не заменяют точную формулировку проблемы. Вам нужно начать свой вопрос с чего-то вроде: «Мне нужно проверить имена в моем приложении. Имена могут содержать буквы, пробелы и любые символы
',.-
, при условии, что за каждой точкой (если таковая имеется) должен следовать пробел или находиться в конце строки. »
Ответ №2:
Затем вам просто нужно переместить .
в конец вашего регулярного выражения (и экранировать его), чтобы вы все равно получали людей с Jr.
в конце их имени:
/([A-Za-z ',-] .?)/
И это должно работать нормально. Попробуйте онлайн!
В Интернете есть несколько отличных ресурсов для изучения регулярных выражений, если вам интересно.
Комментарии:
1. Это не регулярное выражение по вашей ссылке. Якоря? Но о чем же
"Mr. Smith"
? (См. Комментарий к вопросу.)