Рельсы проверяют Full_Name.
-
26-09-2019 - |
Вопрос
Эй ... Как бы вы проверили поле Full_Name (имя фамилии).
Решение
Рассмотрим названия как:
- Мисс Ян Левинсон-Гулд
- Доктор Мартин Лютер Кинг, младший
- Бретт д'Аррас-д'Аудраси
- Brüno
Вместо того, чтобы проверять символы, которые есть, вы, возможно, просто хотите убедиться, что некоторые набора символов нет настоящее время.
Например:
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, вероятно, примерно так же разумно, как вы можете получить, не попадая в специфику того, что введено.
Когда у вас есть имена, такие как «О'Мэлли» с апострофом, «Смит-Джонсон» с тире, «Андрес» с акцентированными персонажами или чрезвычайно короткие имена, такие как «VO LY», практически без символов, как вы подтверждаете без исключения законных случаев? Это не просто.