Эй..., как Вы проверили бы full_name поле (фамилия имени).
Вместо проверки символов, которые есть, вы можете просто убедиться, что некоторый набор символов не присутствует.
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
Любая проверка, которую вы выполняете здесь, скорее всего, выйдет из строя, если только она не носит исключительно общего характера. Например, обеспечение минимальной длины, равной 3, вероятно, настолько разумно, насколько вы можете получить, не вдаваясь в подробности того, что вводится.
Если у вас есть такие имена, как «О'Мэлли» с апострофом, «Смит-Джонсон» с тире, «Андрес» с диакритическими знаками или очень короткие имена, такие как «Во Ли», практически без букв, как вы подтверждаете, не исключая законных случаев? Это не легко.