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" практически без символов, как вы проверяете без исключения законных случаев? Это не просто.