2016-12-27 81 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