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

#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" ? (См. Комментарий к вопросу.)