모델에는 필드가 있습니다
validates :image_file_name, :format => { :with => %r{\.(gif|jpg|jpeg|png)$}i
나에게는 꽤 이상해 보인다. 나는 이것이 정규 표현식이라는 것을 알고 있습니다. 그러나 나는 원합니다 :
- 그것이 무엇을 의미하는지 아는 것. 가
%r{value}
동일/value/
? - 일반 Ruby 정규식 연산자
/some regex/
또는 로 대체 할 수 있습니다~=
. 가능합니까?
답변
%r{}
/.../
표기법 과 동일 하지만 정규 표현식에서 이스케이프하지 않고 ‘/’를 가질 수 있습니다.
%r{/home/user}
다음과 같습니다.
/\/home\/user/
이것은 가독성을 위해 구문 상품 일뿐입니다.
편집하다:
‘{}’대신 알파벳이 아닌 문자 쌍을 거의 모두 사용할 수 있습니다. 이러한 변형은 다음과 같이 작동합니다.
%r!/home/user!
%r'/home/user'
%r(/home/user)
편집 2 :
참고 그 %r{}x
복잡한 regexps ‘에 더 읽기 만들기 공백, 변형 무시합니다. GitHub의 Ruby 스타일 가이드의 예 :
regexp = %r{
start # some text
\s # white space char
(group) # first group
(?:alt1|alt2) # some alternation
end
}x
답변
\.
=>는 점을 포함하고
(gif|jpg|jpeg|png)
=> 그런 다음 확장 중 하나
$
=> 끝, 그 뒤에 아무것도
i
=> 대소 문자 구분 안 함
그리고 쓰는 것과 같습니다 /\.(gif|jpg|jpeg|png)$/i
.
답변
을 사용하면 %r
모든 구분 기호를 사용할 수 있습니다.
당신은 사용할 수 있습니다 %r{}
또는 %r[]
또는 %r!!
등
다른 델리 미터를 사용하면 /
일반 정규 표현식 리터럴에서 이스케이프 처리 할 필요가 없습니다 .
답변
이 정규 표현식은 .gif, .jpg로 끝나는 모든 문자열과 일치합니다.
당신은 그것을 대체 할 수 있습니다
/\.(gif|jpg|jpeg|png)$/i
답변
그것은 점과 gif, jpg, jpeg 또는 png 중 하나로 image_file_name
끝나야 한다는 것을 의미 합니다 $
.
예, %r{}
정확히 동일 //
하지만 %r{}
탈출 할 필요는 없습니다 /
.