gpt4 book ai didi

c# - 正则表达式年龄验证

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

谁有用于年龄验证的良好正则表达式?

我有一个日期字段,我在其中验证用户输入的是日期。

基本上我想弄清楚那个日期是否有效,然后进一步细化日期使其在 x 年内

也许这可能太复杂而无法附加到我所拥有的任何东西上,但我认为它不会。

^([1][012]|[0]?[1-9])[/-]([3][01]|[12]\d|[0]?[1-9])[/-](\d{4}|\d{2})$

最佳答案

我是正则表达式的忠实拥护者,当然可以使用正则表达式检查日期是否在“合法范围”内。

但是:

匹配一个有效日期(没有像检查闰年这样花哨的东西)是相当微不足道的,但对于正则表达式来说却很烦人 - 一个用于构建像 RegexMagic 这样的正则表达式的工具会很快为你做这件事:

(?:0?2[/.-](?:[12][0-9]|0?[1-9])|(?:0?[469]|11)[/.-](?:30|[12][0-9]|0?[1-9])|(?:0?[13578]|1[02])[/.-](?:3[01]|[12][0-9]|0?[1-9]))[/.-][0-9]{4}

是 RegexMagic 为 MM/DD/YYYY 日期验证生成的内容,没有对日期范围施加限制(即 02/31/2020 不匹配,01/31/4500 匹配)。

这已经很丑陋了,而且可能很难判断您是否继承了这段代码。

第二个问题,即根据预定义的日期范围进行验证,甚至更难看。可以做到,但是

  1. 你需要改变你的正则表达式每一天——毕竟,每一天有一天,有人满 18 岁了,不是吗?和

  2. 正则表达式会变得更加笨拙。允许从 06/10/1992 到06/10/2010,你得到

这个正则表达式的怪物。

0?6[/.-](?:30|[12][0-9])[/.-]1992|(?:(?:0?9|11)[/.-](?:30|[12][0-9]|0?[1-9])|
(?:0?[78]|1[02])[/.-](?:3[01]|[12][0-9]|0?[1-9]))[/.-]1992|0?6[/.-](?:10|0?[1-9])
[/.-]2010|(?:0?2[/.-](?:[12][0-9]|0?[1-9])|0?4[/.-](?:30|[12][0-9]|0?[1-9])|0?
[135][/.-](?:3[01]|[12][0-9]|0?[1-9]))[/.-]2010|(?:0?2[/.-](?:[12][0-9]|0?[1-9])|
(?:0?[469]|11)[/.-](?:30|[12][0-9]|0?[1-9])|(?:0?[13578]|1[02])[/.-](?:3[01]|
[12][0-9]|0?[1-9]))[/.-](?:200[0-9]|199[3-9])

(为了“清晰”而包含换行符)。

明天,你需要

0?6[/.-](?:30|2[0-9]|1[1-9])[/.-]1992|(?:(?:0?9|11)[/.-](?:30|[12][0-9]|0?[1-9])|
(?:0?[78]|1[02])[/.-](?:3[01]|[12][0-9]|0?[1-9]))[/.-]1992|0?6[/.-](?:1[01]|0?[1-9])
[/.-]2010|(?:0?2[/.-](?:[12][0-9]|0?[1-9])|0?4[/.-](?:30|[12][0-9]|0?[1-9])|0?
[135][/.-](?:3[01]|[12][0-9]|0?[1-9]))[/.-]2010|(?:0?2[/.-](?:[12][0-9]|0?[1-9])|
(?:0?[469]|11)[/.-](?:30|[12][0-9]|0?[1-9])|(?:0?[13578]|1[02])[/.-](?:3[01]|
[12][0-9]|0?[1-9]))[/.-](?:200[0-9]|199[3-9])

注意到细微差别了吗?

简而言之,正如所有其他人所指出的:这不是您想要使用正则表达式的事情。即使你可以。

关于c# - 正则表达式年龄验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3016575/

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