Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails validating full_name

Hey... how would you validate a full_name field (name surname).

like image 299
xpepermint Avatar asked Apr 13 '10 12:04

xpepermint


2 Answers

Consider names like:

  • Ms. Jan Levinson-Gould
  • Dr. Martin Luther King, Jr.
  • Brett d'Arras-d'Haudracey
  • Brüno

Instead of validating the characters that are there, you might just want to ensure some set of characters is not present.

For example:

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

Tests

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

Regular expression explanation

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
like image 125
maček Avatar answered Nov 08 '22 19:11

maček


Any validation you perform here is likely to break down unless it is extremely general. For instance, enforcing a minimum length of 3 is probably about as reasonable as you can get without getting into the specifics of what is entered.

When you have names like "O'Malley" with an apostrophe, "Smith-Johnson" with a dash, "Andrés" with accented characters or extremely short names such as "Vo Ly" with virtually no characters at all, how do you validate without excluding legitimate cases? It's not easy.

like image 24
tadman Avatar answered Nov 08 '22 17:11

tadman