正则表达式匹配日期格式和URL

时间:2011-07-22 18:38:21

标签: regex

您好我希望能够设置正则表达式以允许像这样输入日期

01/01/1900或01/01/70,我有以下但不知道如何制作它以便最后需要4或2个。

^([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])[- /.][0-9]{4}$

我想知道的另一个是URL

这个我不知道如何制作它以匹配正确的URL?

谢谢

5 个答案:

答案 0 :(得分:1)

这应该与我们的四位数字匹配:

\d{2}(\d{2})?

你的完整正则表达式是这样的:

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

网址很难测试。 http://localhost是有效的网址,因此https://test.example.co.uk:443/index.ece?foo=bar。我会用你的语言寻找一些东西为你测试这个或做一个非常简单的测试(你必须根据你使用的正则表达式引擎划分一些特殊的字符):

^https?://

答案 1 :(得分:0)

要修改你的正则表达式,使它最后需要2或4位数,你可以试试这个:

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

对于网址,您可以尝试(来自here):

(http|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

或查看this S.O. question

答案 2 :(得分:0)

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

答案 3 :(得分:0)

嗯,([0-9]{4}|[0-9]{2})对你不够好吗?可能你可以添加一些检查,四位数组中的前两位数是1920,但这取决于你的需要。

对于网址匹配,请查看here。他们中的很多都有测试。

答案 4 :(得分:0)

您可以在最后使用另一个替换接受2或4(与其他日期部分的“或”选项相同)。或者,您可以在最后一个位置要求2位数字,然后在此之后有2个可选数字。

除非您需要捕获各个部分(日,月,年),否则应使用非捕获括号,例如(?:)(这是.NET语法)。

最后,您应该考虑使用此功能尝试实现的验证类型。最好强制执行格式,而不是担心像91/73/9004这样的错误表单,因为即使你拥有的东西,你仍然可以得到无效的日期,比如02/31/2011。由于您可能需要执行进一步的验证,为什么不将正则表达式简化为^(?:\d{1,2}[-/.]){2}\d{2}(?:\d{2})?$

对于URL,stackoverflow上堆满了重复的问题。