Как написать Regex, чтобы запретить этот номер телефона с символом новой строки?

ruby-on-rails regex rspec rspec-rails

75 просмотра

1 ответ

У меня есть проблема, чтобы написать регулярное выражение, чтобы пройти последний тест со значением номера телефона, равным "+48 999 888 777 \ naseasd". Вот мои файлы. Что я делаю не так?

приложение / модели / user.rb

class User < ActiveRecord::Base

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
  :recoverable, :rememberable, :trackable, :validatable

  validates :phone_number, format: { with: /[+]?\d{2}(\s|-)\d{3}(\s|-)\d{3}(\s|-)\d{3}/, allow_nil: true }

end

спецификации / модель / user_spec.rb

require 'rails_helper'

describe User do

  it { is_expected.to allow_value('+48 999 888 777').for(:phone_number) }
  it { is_expected.to allow_value('48 999-888-777').for(:phone_number) }
  it { is_expected.to allow_value('48 999-888-777').for(:phone_number) }
  it { is_expected.not_to allow_value('+48 aaa bbb ccc').for(:phone_number) }
  it { is_expected.not_to allow_value('aaa +48 aaa bbb ccc').for(:phone_number) }
  it { is_expected.not_to allow_value("+48 999 888 777\naseasd").for(:phone_number) }

end

Ошибка в консоли:

Failures:

1) User should not allow phone_number to be set to "+48 999 888 777\naseasd"
 Failure/Error: it { is_expected.not_to allow_value("+48 999 888 777\naseasd").for(:phone_number) }
   Expected errors  when phone_number is set to "+48 999 888 777\naseasd", got errors: ["can't be blank (attribute: \"email\", value: \"\")", "can't be blank (attribute: \"password\", value: nil)"]
 # ./spec/models/user_spec.rb:9:in `block (2 levels) in <top (required)>'
Автор: Hubert Jakubiak Источник Размещён: 08.11.2019 11:06

Ответы (1)


0 плюса

Решение

Твой

it { is_expected.not_to allow_value("+48 999 888 777\naseasd").for(:phone_number) }

означает, что вы хотите, чтобы ваш шаблон соответствовал только всей строке.

Добавьте  \Aв начале и  \zв конце шаблона.

Обратите внимание, что ^совпадения в начале строки в Ruby (в то время как $совпадения в конце строки) и в RoR обычно вызывают исключение. \zЯкорь лучше , чем \Zдля целей проверки , так как \Zможет соответствовать до окончательного перевода строки в строке и \zсоответствует только в самом конце строки.

Автор: Wiktor Stribiżew Размещён: 20.08.2016 10:04
Вопросы из категории :
32x32