Я бы предложил альтернативный маршрут ... на самом деле очень странный.Если вы переживаете нехватку времени и не хотите иметь дополнительный столбец в существующей таблице, тогда я бы предложил создать фрагмент имени пользователя.Я знаю, это излишне для вашей проблемы.Но я предпочитаю делать свои проверки таким образом.Вместо того, чтобы сравнивать новое имя пользователя с уже сохраненным (и ломать голову над всеми этими грязными регулярными выражениями), я просто проверяю новый слаг против сохраненного слага (который, кстати, обрабатывает все эти грязные регулярные выражения для вас).Вы можете проверить to_slug : http://github.com/ludo/to_slug
Слагы используются в основном для фильтрации опасных символов из URL-адресов.Почему бы не использовать то же самое для проверки имен пользователей?Он также обрабатывает символы Юникода.
Это не прямой ответ на вашу проблему.Но я столкнулся с той же ситуацией, что и вы, и, поскольку у меня были проблемы с временем, я решил использовать слагов.
Простая проверка в моей консоли дает:
>> "Harry Junior Potter".to_slug
=> "harry-junior-potter"
>> "Harry Junior Potter".to_slug
=> "harry-junior-potter"
>> "Harry Junior Potter".to_slug
=> "harry-junior-potter"
>> "Harry(junior(potter))".to_slug
=> "harry-junior-potter"
>> "Harry_Junior_Potter".to_slug
=> "harry_junior_potter"
Итак, теперь, еслии только если слаг проверяет пользователя, ему разрешено сохранять свое имя.