Регулярная задача с методом сопоставления - PullRequest
0 голосов
/ 17 февраля 2011

Я хочу проверить много писем (одно или несколько) с выражением регулярного выражения, но этот атрибут не относится ни к одной модели.Поэтому я написал метод:

def emails_are_valid?(emails)
     #regex with validation  
     regex = Regexp.new("^(\s*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*([,]{1}[\s]*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*)*)$")
     #if the quantity of emails is zero o its validations is bad return false.   
     if emails.blank? || emails.match(regex).nil?
          return false
        else
          return true
        end
end

Я оцениваю эту строкуИтак, согласно этой странице мое регулярное выражение в порядке.

Но когда я оцениваю emails.match (regex) .nil?это возвращает мне ложь (поэтому строка действительна, но эта строка неверна)

Пожалуйста, мне нужна помощь.мое регулярное выражение плохо или мой emails_are_valid?Метод плохой или метод соответствия плохой.

Заранее спасибо.

1 Ответ

1 голос
/ 17 февраля 2011

Вы должны были использовать одинарные кавычки вместо двойных кавычек при объявлении своего регулярного выражения, в противном случае \s анализируется как escape-последовательность.

Измените эту строку на

 regex = Regexp.new('^(\s*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*([,]{1}[\s]*[a-zA-Z0-9\._%-]+@[a-zA-Z0-9\.-]+\.[a-zA-Z]{2,4}\s*)*)$')

иметод сработает.

Если заметить, это был бы более краткий способ сделать то же самое - http://codepad.org/YbsqIkcP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...