2016-03-15 4 views
2

Моя модель имеет слизню с дружественным удостоверением личности, а иногда пользователь вводит только цифры и имеет проблемы с доступом к страницам. Затем я хочу изменить проверку модели, кроме только цифр и некоторых специальных символов.Rails4: модель проверяет «формат с» регулярным выражением для столбца слизняка

Вот текущая модель подтверждает

validates :slug, presence: true, length: { maximum: 200 }, uniqueness: true, 
     format: {with: /\A[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\\/<>?,]+\z/, message: :invalid_slug} 

Как я могу добавить здесь ??

Пример:

ток:

'123' => valid 
'abc' => valid 
'adb?&' => invalid 

Новое:

'123' => invalid 
'abc' => valid 
'adb?&' => invalid 

веселит

+0

Вы хотите иметь все специальные символы (кроме? И &) в пули или просто подчеркивание и дефис? –

+0

Как вы генерируете пулю с входа? Почему бы вам не справиться с такими случаями, когда вы создаете пул? – spickermann

+0

Итак, просто добавьте цифры в класс отрицательных символов: '/ \ A [^ 0-9 \ s! # $%^& *()() = + ;: '" \ [\] \ {\} | \\\/<>?,] + \ z/'- это не то, что вам нужно, или вы хотите разрешить цифры + что-то еще и хотите запретить только числовые пули? Затем используйте'/\ A (? ! \ d + \ г) [^ \ S # $%^& *()() = + ;: ' "\ [\] \ {\} |!? \\\/<>] + \ г /' , –

ответ

2

В настоящее время регулярное выражение:

/\A[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\\/<>?,]+\z/ 

Соответствует любой строке, которая содержит только 1 + символы, отличные от указанных в класс символов с отрицанием[^...]. Таким образом, поскольку цифр нет, цифры могут быть введены в строку, и могут быть 1 + цифры, и регулярное выражение будет соответствовать этому только числовому.

Чтобы ограничить этот шаблон, чтобы исключить соответствующие числовые-только слизни, просто добавьте (?!\d+\z) предпросмотр сразу после \A якоря:

/\A(?!\d+\z)[^\s!#$%^&*()()=+;:'"\[\]\{\}|\\\/<>?,]+\z/ 
    ^^^^^^^^^ 

Смотрите на regex demo (многострочный, таким образом, используя ^/$ якоря, вам нужно использовать \A и \z в ROR)

Этот lookahead будет выполняться один раз в начале строки и будет возвращать false, когда он утверждает (= соответствует) только цифры (1 или более) до конца строки.

 Смежные вопросы

  • Нет связанных вопросов^_^