gpt4 book ai didi

ruby-on-rails - 为什么 ruby​​ REGEX\A...\z 允许在开始时输入任何内容?

转载 作者:太空宇宙 更新时间:2023-11-03 18:04:17 25 4
gpt4 key购买 nike

这个 Ruby REGEX 允许 +& 开头,我不知道为什么。

 REGEX = /\A0(\d{4,14})|((\d{1,4}-\d{1,4}-\d{3,4}))\z/

当我将 A...\z 之间的部分设为他们自己的组时,这似乎解决了这个问题,但这让我很担心,希望有经验的人提供解释。

 REGEX = /\A(0(\d{4,14})|((\d{1,4}-\d{1,4}-\d{3,4})))\z/

其他一些需要注意的事项,我将其用作 Rails 项目中表单字段的验证。 REGEX 被存储为常量,并通过验证与输入进行比较:... {with: REGEX} 函数。

最佳答案

那是因为您没有在第二个备选方案中包含 \A

&+ 或与此相关的任何其他字符将在字符串的开头匹配 - 如果正则表达式的其余部分匹配 ((\d{1,4}-\d{1,4}-\d{3,4}))\z

假设分隔符不存在,我们只看第二种选择:

((\d{1,4}-\d{1,4}-\d{3,4}))\z

您没有断言任何字符串开头要求(注意:\A 在此替代方案中不存在 - 以及 \z 在您的第一个替代方案中不存在。)

因此,请尝试其中任何一种,它应该适合您。

/\A0(\d{4,14})\z|\A0((\d{1,4}-\d{1,4}-\d{3,4}))\z/

/\A0(?:(\d{4,14})|((\d{1,4}-\d{1,4}-\d{3,4})))\z/

在线regex debugger可以帮助您 Debug模式。 Take a look在您的两个选择中:

enter image description here

注意到蓝色(精心绘制的)圆圈没有显示您的 \z - 以及没有显示 \A0 的红色圆圈?

还有一个稍微缩短/优化的模式:

/\A0(?:\d{4,14}|(?:\d{1,4}-){2}\d{3,4})\z/

我对为什么有两个捕获完全相同的字符串的捕获组感到有点困惑。 ((\d{1,4}-\d{1,4}-\d{3,4}))。您可能应该删除其中一个,因为它看起来多余。

关于ruby-on-rails - 为什么 ruby​​ REGEX\A...\z 允许在开始时输入任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52213422/

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