2014-02-06 7 views
1

작업 : 식별자에는 숫자가 아닌 하나 이상의 문자가 포함되어야하며 숫자, 문자, "_"및 "-"문자 만 포함되어야합니다.문자열에 허용되는 문자 만 포함되어 있는지 확인

따라서 'qwerty', 'identifier-45', 'u _-_-', '-42-'는 유효한 식별자입니다.

'123456', '& 1234', '식별자 42'가 잘못되었습니다.

정규 표현식으로이를 수행 할 수 있습니까?

id.match(/\w\d/) 

또는 하나 이상의 일치와

id.match(/\w/) && id.match(/\d/) 

아니면 모두 허용되는 문자의 배열을하고 나머지는] [보다 많은 경우 (이를 제거 원래 문자열을 필터링 할 수 있습니다 , 금지 된 것들이있다)?

id.to_a.select{|character| !((0..9) + (a..z) + ['-','_']).include?(character)}.count == 0 

모든 허용 된 문자는 문자열에서 제외됩니다 즉, 그 길이가 1 이상이면 긍정적 예측하여 일부 금지 문자 (같은 &)

답변

3

이있을 것입니다 :

pattern = /^(?=.*\D)[-\w]+$/ 

pattern =~ 'qwerty' 
# => 0 
pattern =~ 'identifier-45' 
# => 0 
pattern =~ 'u_-_-' 
# => 0 
pattern =~ '-42-' 
# => 0 

pattern =~ '123456' 
# => nil 
pattern =~ 'w&1234' 
# => nil 
pattern =~ 'identifier 42' 
# => nil 
1

룩어 헤드를 사용하여 규칙을 구현할 수 있습니다.

/^(?=.*\D)[\w-]*$/ 

이 정규식은 영문이 아닌 문자 (액센트는 아님) (_-) 만 포함하는 문자열을 하나 이상의 숫자와 일치시킵니다.

관련 문제