需要Ruby regexp来验证“A1:B2”字符串格式

时间:2012-09-11 15:04:03

标签: ruby regex

我正在搜索ruby regexp,它将以以下格式验证字符串:"A1:B2"。冒号左侧的字母位于A - F之间,冒号的右侧位于A - Z之间,而不是字母顺序中的字母。左侧。

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

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

换句话说,考虑一个包含六列A - F和n行的Excel表格,因此A1:B2将覆盖四个单元格A1,{{1} },A2B1

如果您发现任何与上述情况匹配的正则表达式,请告诉我。

2 个答案:

答案 0 :(得分: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

(假设你只想在冒号的每一边都允许一个字母和一个数字。)

答案 1 :(得分: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