2016-12-27 43 views
1

我正在开发一个php应用程序,用户必须插入Excel的单元格ID(例如A1AB32),该值存储在数据库中供以后使用,试图使用正则表达式验证单元格ID格式,但它似乎并没有工作,这是我迄今为止。用于验证Excel单元格的正则表达式

^[a-zA-Z]\d$ 
+0

您需要的量词,如果有可能的倍数。 '[A-ZA-Z] +'将允许'AB',或'A',或'aBc'等'\ d +'将允许'1','32','333'等。可以使用regex101测试,https://regex101.com/r/8OQVBs/1,以更新https://regex101.com/r/8OQVBs/2 – chris85

+0

使用'^ [A-ZA-Z] + \ d + $'甚至'^ [A-ZA-Z] + \ d + \ z' –

+1

BTW,我已检查:在我的Excel中,我有最大1048576行和'XFD'列。用正则表达式这可能不那么容易。 –

回答

0

尝试这种^[a-zA-Z]{1,4}(\d+)$

  • ^([A-ZA-Z] +):与一个数字或多个
  • 结束:1和4的信
  • $之间
  • (\ d +)起始
+1

如何验证数字部分小于** 1048577 **? –

+1

你如何验证该文字部分具有小于** 4 **信? –

+0

我刚更新了我的答案,检查最多4个字母。 但只要我知道的正则表达式是字符串,它无法评估值,和你的约束不能导致一个特定的模式,可以“轻而易举地”作为一种表达实现的。 你可以尝试将你的最大限制1048577分割为许多条件(1或没有),(0到9或注释)......但事件这种方式你不能得到完全正确的限制。 –

1

在@BartKiers的这个问题中有一个很棒的answer,他构建了一个函数来构造这些类型的正则表达式,这些正则表达式需要匹配x到y的范围。他的逻辑很好地转换为文本范围,并且在regex101.com上是tested in PCRE dialect

正则表达式:

^(?:[A-Z]|[A-Z][A-Z]|[A-X][A-F][A-D])(?:[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9][0-9]|10[0-3][0-9][0-9][0-9][0-9]|104[0-7][0-9][0-9][0-9]|1048[0-4][0-9][0-9]|10485[0-6][0-9]|104857[0-6])$

这基本上说:

  • 列部分:A-Z,或者A-ZA-Z,或者A-XA-FA-D

  • 行部分:1-9,或1-90-9,或1-91-90-9等一路的104857最大与0-6

它匹配以下:

A1 
AA11 
AAA111 
ZZ12 
YY1048575 
XFD1048576 

它不会匹配以下内容:

A0 
AA01 
AAZ1111111 
XFD1048577 
XFE1048576 
ZZZ333 
ZZZ9999999 

下面是图:

enter image description here