Rails проверяет полное_имя

Эй... как бы вы проверили поле полного имени (имя, фамилия).

3 ответа

Решение

Рассмотрим имена, такие как:

  • Г-жа Ян Левинсон-Гулд
  • Доктор Мартин Лютер Кинг младший
  • Бретт д'Аррас-д'Аудрейси
  • Бруно

Вместо проверки присутствующих символов вы можете просто убедиться, что какой-то набор символов отсутствует.

Например:

class User < ActiveRecord::Base

  validates_format_of :full_name, :with => /\A[^0-9`!@#\$%\^&*+_=]+\z/
  # add any other characters you'd like to disallow inside the [ brackets ]
  # metacharacters [, \, ^, $, ., |, ?, *, +, (, and ) need to be escaped with a \

end

тесты

Ms. Jan Levinson-Gould         # pass
Dr. Martin Luther King, Jr.    # pass
Brett d'Arras-d'Haudracey      # pass
Brüno                          # pass
John Doe                       # pass
Mary-Jo Jane Sally Smith       # pass
Fatty Mc.Error$                # fail
FA!L                           # fail
#arold Newm@n                  # fail
N4m3 w1th Numb3r5              # fail

Объяснение регулярного выражения

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  \A                       the beginning of the string
--------------------------------------------------------------------------------
  [^`!@#\$%\^&*+_=\d]+     any character except: '`', '!', '@', '#',
                           '\$', '%', '\^', '&', '*', '+', '_', '=',
                           digits (0-9) (1 or more times (matching
                           the most amount possible))
--------------------------------------------------------------------------------
  \z                       the end of the string

Не менее одного пробела и не менее 4 символов (включая пробел)

\A(?=.* )[^0-9`!@#\\\$%\^&*\;+_=]{4,}\z

Любая проверка, которую вы проводите здесь, может быть сорвана, если она не носит чрезвычайно общий характер. Например, применение минимальной длины 3, вероятно, примерно настолько же разумно, насколько вы можете получить, не вдаваясь в специфику того, что вводится.

Если у вас есть такие имена, как "O'Malley" с апострофом, "Smith-Johnson" с тире, "Andrés" с акцентированными символами или чрезвычайно короткие имена, такие как "Vo Ly" практически без символов, как вы проверяете без исключения законных случаев? Это не просто.

Другие вопросы по тегам