Недопустимое регулярное выражение Ruby on Rails

#ruby-on-rails #regex #ruby-on-rails-3

#ruby-на-рельсах #Регулярное выражение #ruby-on-rails-3

Вопрос:

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

Код регулярного выражения проверки имени Ruby on Rails:

 validates :name, :format => {:with => /A[A-Za-zd_]z/}
 

Что я делаю не так?

Спасибо

Комментарии:

1. Попробуйте использовать заглавную букву Z или попробуйте использовать ^ и $ вместо этого

Ответ №1:

 validates :name, :format => {:with => /^[A-Za-z0-9_] $/}
 

Хорошая страница для тестирования регулярных выражений в ruby: http://rubular.com /

Комментарии:

1. Я не думаю, что пустая строка должна проверяться. А ты?

2. за исключением … для замены Az на ^$ см.: guides.rubyonrails.org/security.html#regular-expressions

Ответ №2:

 # A[A-Za-zd_]z
# 
# Options: ^ and $ match at line breaks
# 
# Assert position at the beginning of the string «A»
# Match a single character present in the list below «[A-Za-zd_]»
#    A character in the range between “A” and “Z” «A-Z»
#    A character in the range between “a” and “z” «a-z»
#    A single digit 0..9 «d»
#    The character “_” «_»
# Assert position at the very end of the string «z»
 

Это ваше выражение. Вы действительно хотите сопоставить один символ?

Я считаю, что :

 /^w $/
 

это то, что вы ищете. w — это сокращенный символьный класс для того, что вы написали. Приведенное выше регулярное выражение будет соответствовать строке, состоящей только из A-Za-Z0-9_