2009-12-09 64 views
0

我想寫一個正則表達式來驗證零件或型號。正則表達式來驗證模型/零件編號

這些可以包含字母,數字,' - ','/'和空格。它們必須包含至少1個數字,長度在4到20個字符之間。

這裏是我的琴絃的一些例子要匹配:

CVA 620 999 
M3094 
26250 
APL8215/APL8225 
1301 
02-700401 

這是我迄今爲止

([\w- /]*\d){3,19} 

這似乎是工作除了會匹配字符串如 「這是我的型號APL8215」,我只希望它匹配「APL8215」部分。

反正有沒有使用正則表達式來匹配這樣的模型數字?

非常感謝任何幫助!

回答

0

我認爲這可以給您迴應的問題:

\b((?=[A-Za-z/ -]{0,19}\d)[A-Za-z0-9/ -]{4,20})\b 

它尋找[A-ZA-Z0-9/- ]組成的4至20個字符的字符串字符和這個字符串必須是「自己「(\ b代表字邊界)。 該字符串必須包含至少一個數字:這是用一個超前表達式完成的:(?= [A-Za-z/- ] {0,19} \ d)。

具有下列樣品:

CVA 620 999 
M3094 
26250 
APL8215/APL8225 
1301 
1232-1231 
02-700401 
DGEIVEOCE 
cdzjkblcvsz#56464e 
siovbsbf~1313/ 
APL8215/APL8225APL8215/APL8225 

我得到:

"CVA 620 999" 
"M3094" 
"26250" 
"APL8215/APL8225" 
"1301" 
"1232-1231" 
"02-700401" 
"56464e" 
"1313" 
"APL8215/" 
"APL8225APL8215/" 
"APL8225" 

最後的結果是由預期字邊界值解釋說: '/' 可以是單詞邊界。 如果你想解決這個問題,你必須在主Regex之前使用lookbehead和lookahead。

這就是你想要的嗎?

+0

謝謝阿諾。它仍然拉出一些周圍的話,但我不認爲他們是這樣! – carok 2009-12-10 14:07:45

0

不幸的是,由於你的正則表達式的靈活性,這當然會匹配上面指定的字符串。如果你能進一步限制你的標準,例如只包括大寫字母,那麼你就可以拿起這些代碼與一個正則表達式,如:

[A-Z0-9- ]{4,20}

0

因爲它似乎不是可能的組同樣的傘下的所有型號,我會使用一個以上的正則表達式:

  • CVA xxx xxx
  • Mxxxx
  • xxxxx
  • APLxxxx

其中x是數字(從你的例子)等。一旦你提取了regexp的相關子集,你就可以優化你的解析或者將它們連接到相同的輸出中。

1

IMO這是更好地使每個型號格式中的一個正則表達式和
然後在一個正則表達式將它們結合起來。

例:R = (modelA_regex)|(modelB_regex)|(modelC_regex)

+0

謝謝尼克。不幸的是,我沒有確定所有數字格式的清單,加上它們是用戶輸入的(做一些數據挖掘),所以不要堅持任何格式! – carok 2009-12-10 14:11:40

1

這是接近我可以得到:

(?=.*\d)[\w\d\- ]{4,20} 

遺憾的是它不與例如工作,這是我的模型APL8215因爲規則是務實足以匹配這是我的型號APL作爲在匹配APL8215部件之前的有效部件號。