gpt4 book ai didi

regex - 正则表达式也强制执行长度检查

转载 作者:行者123 更新时间:2023-12-02 01:07:26 25 4
gpt4 key购买 nike

我有以下(不工作)正则表达式

(^$|(([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?))((^([a-zA-Z0-9]{8})$)|(^([a-zA-Z0-9]{11})$)))

让我分解一下逻辑。

^$|是第一部分,这实际上意味着如果字符串的长度为 0,则它验证为真。

显然 |表示一个或。

然后添加下一位。

([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?) - 这是需要匹配的字符串格式,实际上这是为了匹配 BIC(银行标识符代码)。

所以我们最终得到:

pattern: '(^$|([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?))'

如果提供了值,基本上只匹配 BIC,到目前为止还好吗?

但是现在我想扩展它以确保该字符串是 8 个或 11 个字符。

所以我想出了这个匹配 8 个字符的小查询:(^([a-zA-Z0-9]{8})$)

所以如果我们将它捆绑到我们的正则表达式中,我们最终会得到

'(^$|([a-zA-Z]{4}[a-zA-Z]{2}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)(^([a-zA-Z0-9]{8})$))'

所以此时它不起作用。

进行长度检查的正确方法是什么?

是不是语法导致了问题?

最佳答案

I want to extend this to also ensure that the string is either 8 or 11 characters.

首先你的正则表达式可以缩短为:

([a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)

如果您注意到您已经在匹配 length=8 或 length=11,因为最后 3 个字母数字是可选的。我建议用开始/结束 anchor 将它们括起来以强制长度。

您的最终正则表达式可以是这样的:

^(?:[a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?)?$

PS:您实际上不需要特定的 ^$ 来匹配,因为我已将整个正则表达式设为可选,从而允许它匹配空字符串。

在线工作演示:http://regex101.com/r/lA6jK6

关于regex - 正则表达式也强制执行长度检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013960/

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