2012-09-11 2 views
-2

"A1:B2" 형식의 문자열을 검증하는 루비 regexp를 검색합니다. 콜론의 왼쪽 부분에있는 글자는 A - F 사이이며 콜론의 오른쪽은 A - Z 사이에 있으며 왼쪽의 글자보다 알파벳 순서가 빠릅니다."A1 : B2"문자열 형식 유효성 검사를위한 루비 정규 표현식이 필요합니다.

일부 유효한 예는 "A1:B2", "A3:B4", "A5:B6", "C2:D3"입니다.

일부 잘못된 예는 "E1:A2", "B4:A3"입니다. 즉

은, 6 개 열 A와 엑셀 테이블을 고려 - F n은 행, 그래서 A1:B2는 4 개의 셀 A1, A2, B1, B2을 다룰 것입니다.

위의 시나리오와 일치하는 정규식을 찾으면 알려주세요.

+1

당신이 Excel 형식과 비교하는 경우 문자 사이의 관계가 중요하지만, 왜 결장의 양쪽에있는 숫자 사이의 관계가 중요하지 않습니다? – sawa

+0

제 경우에는 왼쪽 위의 대각선을 형성하는 동안 숫자는 중요하지 않습니다. 그래서이 경우 숫자는 중요하지 않지만 글자는 – Dinesh

+0

아무런 제한없이 숫자가 어떻게 ** 왼쪽 ** ** ** ** ** 대각선을 정의 할 수 있습니까? – sawa

답변

2

정규 표현식만으로는이 작업을 수행 할 수 없습니다. /^([A-F])(\d):([A-Z])(\d)$/과 같은 것을 사용하고 $ 1 ~ $ 3, $ 2 ~ $ 4를 비교해야 할 것입니다.

예 : (. 당신은 단지 하나 개의 문자와 콜론의 양쪽에 하나씩 자리를 허용 할 것을 가정)

def validate(str) 
    /^([A-F])(\d):([A-Z])(\d)$/.match(str) && $1 < $3 && $2 < $4 
end 

+0

감사합니다, 이건 내 사건에 완벽하게 작동합니다. – Dinesh

1

당신은 하나의 정규식으로이 작업을 수행 할 수 없습니다. 당신은 그러나 같은 STH와 함께 할 수

def validate(str) 
    a,b = str.split(":") 
    !(/([A-F])\d/ =~ a).nil? && !(/[#{$1}-Z]\d/ =~ b).nil? 
end 

설명 :

첫 번째 문자 $ 1에 투입 한 다음 두 번째 정규식에 삽입됩니다, 당신은 항상 당신이에 있던 문자에서 일치 이런 식으로 첫 번째 부분.

예 :

1.9.2p290 :039 > validate("A1:B2") 
=> true 
1.9.2p290 :040 > validate("B2:A1") 
=> false 
+0

감사합니다. 이것은 또한 완벽하게 작동합니다. – Dinesh

관련 문제