Número de telefone Regex em erro da âncora de Ruby com ^$

estou a tentar validar os números de telefone do Utilizador em Ruby com o seguinte formato:

123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890  

usei a seguinte expressão regular:

/^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/

e obteve este erro ao tentar criar um utilizador na consola de Carris:

ArgumentError: a expressão regular fornecida é a utilização de âncoras multi-linhas (^ ou $), que podem representar um risco de segurança. Pretendia usar \a e \z ou esqueceu-se de adicionar a opção :multi-linha => verdadeiro?

Sei que há pedras preciosas para isto, mas ... gostaria de criar o modelo de usuário eu mesmo, tornando a validação do número de telefone semelhante ao E-mail:

utilizador.rb

class User < ActiveRecord::Base
  before_save { self.email = email.downcase }
  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  VALID_PHONE_NUMBER_REGEX = /^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/
  validates :phone_number, presence: true, length: {maximum: 15},
                    format: { with: VALID_PHONE_NUMBER_REGEX }
  has_secure_password
  validates :password, length: { minimum: 6 }
end
Tentei mudar as âncoras para \a e \z porque é o que parece querer que eu faça, mas não consigo que a expressão regular aceite a gama de entradas de números de telefone que quero. Como posso corrigir o regex?

Author: Virge Assault, 2015-02-04

1 answers

O problema é nesta linha

VALID_PHONE_NUMBER_REGEX = /^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/

Deve ser alterado para

VALID_PHONE_NUMBER_REGEX = /\A(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}\z/

Pessoalmente, eu sugeriria para evitar tentar usar um único regex para validar todos esses formatos. Ou agrupar formatos semelhantes, e usar diferentes expressões regulares, ou normalizar a entrada e validar alguns formatos.

Você também pode querer dar uma olhada em falso.

 3
Author: Simone Carletti, 2015-02-04 10:19:29