正则表达式验证模型/部件号

时间:2009-12-09 09:29:57

标签: regex

我正在尝试编写一个正则表达式来验证零件或型号。

这些可以包含字母,数字,' - ','/'和空格。它们必须包含至少1个数字,长度在4到20个字符之间。

以下是我想要匹配的字符串的一些示例:

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

这是我到目前为止所拥有的

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

它似乎与它分开将匹配字符串,如 “这是我的型号APL8215”,我只希望它与“APL8215”部分相匹配。

无论如何使用正则表达式匹配这样的型号?

非常感谢任何帮助!

5 个答案:

答案 0 :(得分:1)

IMO最好为每个型号格式制作一个正则表达式 然后将它们组合在一个 big 正则表达式中。

示例:r = (modelA_regex)|(modelB_regex)|(modelC_regex)

答案 1 :(得分:1)

尽可能接近:

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

不幸的是,它不适用于示例这是我的模型APL8215 ,因为规则足够实用,可以匹配这是我的模型APL 作为有效的部件号匹配 APL8215 部分。

答案 2 :(得分:0)

不幸的是,由于你的正则表达式的灵活性,这当然会匹配你上面指定的字符串。如果您可以进一步限制条件,例如只包含大写字母,那么您可以使用正则表达式来获取这些代码,例如:

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

答案 3 :(得分:0)

由于似乎无法将所有型号分组在同一个保护伞下,我会使用多个正则表达式:

  • CVA xxx xxx
  • Mxxxx
  • xxxxx
  • APLxxxx

其中x是一个数字(来自您的示例),依此类推。一旦提取了相关的regexp子集,就可以优化解析或将它们连接到相同的输出中。

答案 4 :(得分: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" 

最后的结果用预期的字边界值来解释:'/'可以是字边界。 如果你想解决这个问题,你必须先使用lookbehind并在主Regex之后进行预测。

这就是你想要的吗?