Попытка проверить строку содержит только цифры или буквы (и может содержать пробелы) - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь использовать проверку строки, но по какой-то причине специальные символы продолжают появляться, и я просто не могу понять, чего мне здесь не хватает.

Вот что у меня сейчас в модели

  validates :name, presence: true, uniqueness: true, format: { with: /[a-z0-9A-Z]/ , :message => "is not valid" }

Я тоже пробовал

  validates :name, presence: true, uniqueness: true, format: { with: /\A[a-z0-9A-Z]\z/ , :message => "is not valid" }

Мне нужно проверить, что строка содержит только буквы или цифры и может содержать пробел. Так что test 03 будет действительным, а test *** - нет. По какой-то причине последняя продолжает проходить, хотя, когда я запускаю здесь регулярное выражение https://rubular.com/, оно не соответствует этим символам, что может привести к сбою проверки, я думаю.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 13 января 2019
r = /
    \A            # match the beginning of the string
    [ \p{Alnum}]  # match a space, digit or Unicode letter in a character class
    +             # repeat one or more times
    \z            # match the end of the string
    /x            # free-spacing regex definition mode

"I am told that 007 prefers zinfandel to rosé".match? r
  #=> true 
"007, I am told, prefers zinfandel to rosé".match? r
  #=> false

Обратите внимание, что использование ("\p{} construct") \p{Alnum} (или сопоставимого выражения POSIX [[:alnum:]]) полезно не только для неанглийского текста, но и для слов с диакритическими знаками, которые появились. на английский язык, такой как «розовое» (что не очень хорошо можно написать «роза»). Эти выражения задокументированы в Regexp (поиск в файле).

0 голосов
/ 12 января 2019

Я не использую RUBY, однако, попробуйте этот синтаксис регулярных выражений - для этого потребуется только a-zA-Z0-9 и хотя бы один символ:

/\A[a-z0-9A-Z ]+\z/

ИЛИ этот, если строка может иметь длину = 0:

/\A^[a-z0-9A-Z ]*\z/

- обновлено, чтобы включить поддержку пробела

...