Regular expression to validate Excel cell

2020-04-26 02:45发布

问题:

I'm working on a php application where the user has to insert an Excel's cell id (for example A1 or AB32), a value which is stored in the database for later use and I'm trying to validate the cell id format using a regular expression, but it just doesn't seem to be working, this is what I've got so far.

^[a-zA-Z]\d$

回答1:

There's an awesome answer in this question by @BartKiers where he builds a function to construct these type of regexes that need to match ranges of x to y. His logic transfers nicely to text ranges and is tested in PCRE dialect at regex101.com.

The regex:

^(?:[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])$

Which basically says:

  • Columns part: A-Z, or A-Z with A-Z, or A-X with A-F with A-D

  • Rows part: 1-9, or 1-9 with 0-9, or 1-9 with 1-9 with 0-9 etc all the way to the max of 104857 with 0-6

It matches the following:

A1
AA11
AAA111
ZZ12
YY1048575
XFD1048576

It will not match the following:

A0
AA01
AAZ1111111
XFD1048577
XFE1048576
ZZZ333
ZZZ9999999

Here's the diagram:



回答2:

try this ^[a-zA-Z]{1,4}(\d+)$

  • ^([a-zA-Z]+) : starting between 1 and 4 letters
  • (\d+)$ : ending with one digit or more