gpt4 book ai didi

JavaScript 正则表达式 : Complicated input validation

转载 作者:行者123 更新时间:2023-11-29 22:40:31 24 4
gpt4 key购买 nike

我正在尝试构建一个正则表达式来筛选有效零件和/或序列号的组合以及范围。

有效的部件号是两个字母、三个数字的模式或/[A-z]{2}\d{3}/

i.e. aa123 or ZZ443 etc...

一个有效的序列号是一个五位数的模式,或者/\d{5}/

13245 or 31234 and so on.

那部分不是问题。我希望组合和范围也有效:

12345, ab123,ab234-ab245, 12346 - 12349 - 最终目标。范围和/或系列零件和/或序列号的任意组合。请注意,在指定范围或系列中的逗号后,空格是可选的。请注意,一系列零件号在范围的两侧具有相同的两个字母组合(即 ab123 - ab239)

两天来我一直在和这个表达式搏斗,没有想出比这个更好的东西:

/^(?:[A-z]{2}\d{3}[, ]*)|(?:\d{5}[, ]*)|(?:([A-z]{2})\d{3} ?- ?\4\d{3}[, ]*)|(?:\d{5} ?- ?\d{5}[, ]*)$/

...

我的 Regex-Fu 很弱。

最佳答案

首先,[A-z] 是错误的。除了字母之外,它还会匹配方括号、反斜杠、插入符、下划线或反引号——ASCII 字符集中大写字母和小写字母之间的所有字符。您应该使用 [A-Za-z] 或带有不区分大小写选项的 [A-Z]

要匹配单个序列号或一系列序列号,请执行以下操作:

/\d{5}(?:\s*-\s*\d{5})?/

...对于零件号:

/([A-Z]{2})\d{3}(?:\s*-\s*\1\d{3})?/i

在您的正则表达式中,您使用了 \4,但那是错误的。它可能是第四个 group 与第一个部分编号中的字母匹配,但它只是第一个 capturing 组,所以你应该使用 \1.

把它放在一起来匹配整个系列,你有

/(?:\b(?:\d{5}(?:\s*-\s*\d{5})?|([A-Z]{2})\d{3}(?:\s*-\s*\1\d{3})?)(?:,\s*)?)+/i

逗号必须是可选的,但这意味着正则表达式可能会错误地匹配 123451234512345ab123 等序列。由于这种情况不太可能发生,所以我添加了单词 boundary (\b) 来覆盖它。两个序列号/零件号/范围之间必须至少有一个非单词字符,(?:,\s*)? 表示只能是逗号和可选的空格。您的 [, ]* 将允许任意数量的空格和/或逗号,或者根本不允许。

关于JavaScript 正则表达式 : Complicated input validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3049799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com