2015-02-04 2 views
1

와 앵커 오류 :

/^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/ 
: 나는 다음과 같은 정규식을 사용
123-456-7890 
(123) 456-7890 
123 456 7890 
123.456.7890 
+91 (123) 456-7890 

레일 콘솔에서 사용자를 만들 때이 오류가 발생했습니다.

ArgumentError : 제공된 일반 표현식이 여러 줄 앵커 (^ 또는 $)를 사용하여 보안 문자를 표시 할 수 있습니다 ity 위험. \ A와 \ z를 사용하거나 multiline => true 옵션을 추가하는 것을 잊었습니까? 내가 아는

이에 대한 보석이있다 그러나 나는 이메일과 유사한 전화 번호를 확인하고, 사용자 모델에게 자신을 만들 싶습니다

User.rb

class User < ActiveRecord::Base 
    before_save { self.email = email.downcase } 
    validates :name, presence: true, length: { maximum: 50 } 
    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][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 

I을 '앵커를 \ A와 \ z로 바꾸려고했는데, 그게 내가 원하는 것처럼 보이기 때문에, 내가 원하는 전화 번호 입력 범위를 받아들이지 못한다. 정규식을 어떻게 수정합니까?

답변

3

문제는 내가 모든 형식의 유효성을 검사하는 하나의 정규식을 사용하려고 방지하기 위해 제안, 그것은

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

로 변경해야이 라인에서

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

입니다. 비슷한 형식을 그룹화하고 다른 정규식을 사용하거나 입력을 표준화하고 몇 가지 형식의 유효성을 검사하십시오.

또한 have a look at Phony 일 수도 있습니다.

+0

감사합니다. 나는 미래의 반복에서 입력을 표준화하는 방법을 살펴볼 것이다. 결국 양식에 전화 번호에 대한 3 개의 입력 공백을 넣고 싶습니다. 그래서 걱정할 필요가 없습니다. 문자, 지금 당장 레일에서 그렇게하는 방법을 모르겠습니다. –

관련 문제