2017-09-25 42 views
0

我需要一個正則表達式來驗證歐盟增值稅號碼。這裏有一些,但它們都是特定於每個成員國的,我不需要它那麼具體。所以需要用戶輸入一定長度的字符,其中第一個字符需要是字母,而其他字母允許使用某些字母就足夠了。歐盟增值稅號碼的簡單正則表達式

所以基本上我需要匹配以下

  • 2-4首字符必須是字母
  • 其餘的可以是數字,或僅含有數字
  • 忽略連字符之間最大2個字母(一些成員國使用它們)
  • 忽略空格和下劃線(因爲用戶)

到目前爲止,我有下面,哪一種沒有工作,但不幸的是也只​​包含字母(ABCDEFGHIJKLMNOP)link

([A-Za-z]{2,4})([a-zA-Z0-9\-\_ ]{2,12}) 

在這裏你可以看到所有的增值稅號碼的格式相匹配的輸入。 https://www.gov.uk/guidance/vat-eu-country-codes-vat-numbers-and-vat-in-other-languages

+0

那麼,什麼是需求?在前2到4個字母后至少有1位數字和至少1個字母?或者至少有1個連字符?或下劃線? –

+0

您的示例ABCDEFGHIJKLMNOP匹配您發佈的規則。因此要澄清:您需要最後一部分(2-12個字符)包含至少1個數字和至少1個字母,以便它不是全部數字或全部字母? – Strikegently

+0

前2-4個字母,其餘字母數字最大爲12. – samuelweckstrom

回答

1

您可以使用

^[A-Za-z]{2,4}(?=.{2,12}$)[-_\s0-9]*(?:[a-zA-Z][-_\s0-9]*){0,2}$ 

regex demo

詳細

  • ^ - 字符串的開始
  • [A-Za-z]{2,4} - 2至4個ASCII信
  • (?=.{2,12}$) - 那麼,必須有2至12個字符到字符串的結尾(它沒有多大意義是什麼字符,我們只是檢查這裏的字符串的其餘部分的長度)
  • [-_\s0-9]* - 零個或多個數字,-_或空白
  • (?:[a-zA-Z][-_ 0-9]*){0,2} - 的0〜2個連續的序列:
    • [a-zA-Z] - ASCII字母
    • [-_\s0-9]* - 零個或更多的數字,-_或空白
  • $ - 字符串的結尾,
+1

這是完美的。非常感謝! – samuelweckstrom

+0

注意:可能會有其他「怪異」輸入,例如['CNTR --------'或'CNTR _________'](https://regex101.com/r/9tL0Ui/1)等。可能希望使模式更精確,[像這樣](https://regex101.com/r/9tL0Ui/2)。 –

+0

我可以問一下這樣的輸入是如何實現的嗎? – samuelweckstrom