2010-05-28 7 views
3

로그인 이름의 유효성을 검사하려면 특수 문자 [email protected]#S%^*()+_-?/<>:"';을 사용하고 싶습니다. 루비 레일에서 정규 표현식을 사용하는 공간. 이러한 특수 문자는 허용해서는 안됩니다. 그 코드는 무엇입니까?특수 문자 유효성 확인

+2

는 * "그에 대한 코드는 무엇입니까?"일 것, 다른 하나는 지적 할 수 있도록 * 왜 여기에 귀하의 노력을 게시하지 오류 : 물건을 배우는 훨씬 더 좋은 방법, IMO. –

+2

나는 Nuby이지만 특수 문자를 차단하는 대신 합법적 인 문자를 허용해야합니다. 누군가 ¨, § 또는 ½을 사용하면 어떨까요? –

답변

0

먼저, authlogic과 같은 로그인 용 보석을 사용하는 것이 좋습니다.

보석을 구성하여 이메일 주소의 유효성을 검사 할 수 있습니다. 또한 사용자 인증 등에 대해 걱정할 필요가 없다는 이점도 얻게됩니다.

너무 쉽게 작업 할 수있는 일품입니다.

1

잘 나는 레일을 모르는 그러나 이것은 정규식 내가 아는 다른 모든 언어처럼 보일 것 인 것이다 :

^[^[email protected]#\$%\^\*\(\)\+_\-\?/\<\>:"';\. ]$ 
1

정규식 /^\w*$/에는 문자, 숫자 및 밑줄을 사용할 수 있습니다.

또한, 당신은 쪽지 및 특정 질문에 대한 답변이 스레드에서 http://rubular.com

3

당신은받은 regexps '에에서 라이브 루비 정규 표현식 편집기가 있습니다. 당신은 원하지 않는 캐릭터를 차단하는 블랙리스트 접근법을 사용하고 있지만 실제로 이것이 가장 좋은 방법입니까? 나는 당신이 & 또는 ~을 포함하지 않았 음을보고, 아직 실종 될 가능성이있는 다른 많은 특수 문자들이 있습니다.

특수 문자를 차단하려는 경우 pablorc의 regexp 제안에 따라 화이트리스트 방식을 제안합니다. 그것은 훨씬 더 광범위하고 허용하려는 것만 나열합니다 ... 특수 문자가 아닌 : 단어, 밑줄 및 숫자 만 허용됩니다.

나는이 정규 표현식을 사용하여 화이트리스트 방식을 사용하는 방법을 만들었습니다.

def valid_login?(str) 
    return true if (/^\w*$/.match(str)) 
    return false 
end 

이 방법은? valid_login하는 문자열이 특수 문자 때문에 모든 문자, 숫자 또는 밑줄이있는 경우에만 true를 반환 (플러스는 이러한 요구 사항을 충족하지 않는 탈락 한 다른) 안전하게 발견되었습니다.

사용법 :

> valid_login?("testy") 
    true 
> valid_login?("a b") 
    false 
> valid_login?("a'") 
    false 
7

validates_format_of :username, :with => /^[A-Za-z0-9.&]*\z/

0
validates_format_of :username, :with => /^[^[email protected]#S%\^\*()\+_-\?\/<>:\"';]+$/