正则表达式:需要验证条形码

时间:2012-09-25 19:41:08

标签: regex

我需要通过正则表达式验证以下条形码:

  

TE1310 2000183B 804F58000020183B 20120509 0013.0002.0000 20161201

我们的条形码扫描仪偶尔会从条形码中删除一些字符,因此我需要通过以下正则规则验证它:

  1. 以“TE1310”开头
  2. 空间
  3. 第二组字符正好是8个长度。可以包含数字或字母
  4. 空间
  5. 第3集包含16个字符。可以是数字或字母
  6. 空间
  7. 第4集必须正好是“0013.0002.0000”
  8. 空间
  9. 第5集和最后一集包含8个字符。仅限数字
  10. 我有以下正则表达式&我很接近但不确定如何做#7以上(0013.0002.0000)。我放了“????”进入下面的正则表达式,我不确定如何做这个部分:

      

    TE1310 \ S [A-ZA-Z0-9] {8} \ S [A-ZA-Z0-9] {16} \ S ???? \ S \ d {8}

    知道怎么做吗? 感谢

2 个答案:

答案 0 :(得分:3)

我假设一个类似于JavaScript的正则表达式语法,基本思想可以转换成我所知道的任何其他正则表达式。

1:从TE1310

开始
^TE1310

^仅用于匹配字符串的开头,后面的字符按字面匹配。

2:空格

/^TE1310 /

我正在添加/正则表达式分隔符,以显示正则表达式中实际包含空格字符。如果您的正则表达式语法支持替代分隔符,您可能会看到~^TE1310 ~的某些内容。

3:第二组字符正好是8个长度。可以包含数字或字母

/^TE1310 [a-zA-Z0-9]{8}/

[abc]用于选择提供的集合中的字符,a-zA-Z0-9的使用是匹配任何字母(大写或小写)或数字。
{n}用于重复之前的选择器n次。

4:空格

/^TE1310 [a-zA-Z0-9]{8} /

5:第3组恰好包含16个字符。可以是数字或字母

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16}/

6:空间

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} /

7:第4集必须正好0013.0002.0000

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} 0013\.0002\.0000/

\.用于转义.,它是任何非换行符的选择器。如果您正在使用字符串构建正则表达式,则可能需要双重转义\字符,因此它可能是\\.而不是\.

8:空格

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} 0013\.0002\.0000 /

9:第5和最后一组包含8个字符。仅限数字

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} 0013\.0002\.0000 \d{8}/

\d匹配数字,相当于[0-9]。与\.类似,您可能需要双倍转义\字符,而不是\\d

10:字符串结尾

您没有明确提及它,但我认为匹配应该只匹配与此模式完全匹配的行,并且后面跟不是尾随数字/字母:

/^TE1310 [a-zA-Z0-9]{8} [a-zA-Z0-9]{16} 0013\.0002\.0000 \d{8}$/

$用于匹配字符串的最后一部分。

答案 1 :(得分:2)

#7是微不足道的,它应该只是0013\.0002\.0000你必须确保逃避你的时期,并逃脱你的逃脱角色,如果这是语言需要的

所以,试试

TE1310\s[A-Za-z0-9]{8}\s[A-Za-z0-9]{16}\s0013\.0002\.0000\s\d{8}

当然,假设其余的点是正确的。

此外,正如Sednus所述,您可能希望匹配字符串的开头和结尾。常规符号的开头为^,结尾为$,但为了以防万一,我会检查您的特定语言的参考。

如果你不这样做,正则表达式会在更大的字符串中找到任何TE1310 2000183B 804F58000020183B 20120509 0013.0002.0000 20161201,例如

asgsdaTE1310 2000183B 804F58000020183B 20120509 0013.0002.0000 20161201qeasdfa