1

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

TE1310 2000183B 804F58000020183B 20120509 0013.0002.0000 20161201

我们的条形码扫描仪偶尔会从条形码中截断一些字符,因此我需要通过以下正则表达式规则对其进行验证:

  1. 以“TE1310”开头
  2. 空间
  3. 第二组字符正好是 8 个长度。可以包含数字或字母
  4. 空间
  5. 第三组包含恰好 16 个字符。可以是数字或字母
  6. 空间
  7. 第 4 组必须正好是“0013.0002.0000”
  8. 空间
  9. 第 5 组也是最后一组包含 8 个字符。仅限数字

我有以下正则表达式,我非常接近,但不确定如何执行上面的#7(0013.0002.0000)。我放了“????” 在我不确定如何执行此部分的下面进入我的正则表达式:

TE1310\s[A-Za-z0-9]{8}\s[A-Za-z0-9]{16}\s????\s\d{8}

知道怎么做吗?谢谢

4

2 回答 2

4

我假设正则表达式语法类似于 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:第三组正好包含 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/

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

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}$/

$用于匹配字符串的末尾。

于 2012-09-25T19:53:49.063 回答
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

于 2012-09-25T19:44:06.487 回答