如何编写Regex以不允许此电话号码带有换行符



我有问题写正则表达式通过最后一次测试,电话号码值等于"+48 999 888 777naseasd"。这是我的文件。我做错了什么?

app/模型/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 777naseasd").for(:phone_number) }
end

控制台错误:

Failures:
1) User should not allow phone_number to be set to "+48 999 888 777naseasd"
 Failure/Error: it { is_expected.not_to allow_value("+48 999 888 777naseasd").for(:phone_number) }
   Expected errors  when phone_number is set to "+48 999 888 777naseasd", 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)>'

您的

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

表示你希望你的模式只匹配整个字符串。

在模式的开头添加A,在模式的末尾添加z

注意,^在Ruby中匹配行首(而$匹配行尾),而在RoR中通常会导致异常。在验证方面,z锚比Z要好,因为Z可以在字符串的最后一个换行符之前匹配,而z只能在字符串的最后匹配。

相关内容

  • 没有找到相关文章

最新更新