2012-09-11 36 views
-2

我正在尋找能驗證格式爲:"A1:B2"格式的字符串的ruby正則表達式。冒號左邊的字母在A-F之間,冒號右邊的字母順序不在前面,字母順序是A-Z需要用於驗證「A1:B2」字符串格式的Ruby正則表達式

一些有效的例子是"A1:B2","A3:B4","A5:B6","C2:D3"

一些無效的例子是"E1:A2","B4:A3"

換句話說,考慮一個Excel表格與六列A - F和n行,所以A1:B2將覆蓋四個單元A1A2B1B2

讓我知道,如果你發現任何正則表達式與上述場景匹配。

+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

你不能用一個單一的正則表達式做到這一點。但是,您可以用某事做這樣

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

相關問題