首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配除日期以外的任何内容

匹配除日期以外的任何内容
EN

Stack Overflow用户
提问于 2011-10-28 00:07:33
回答 4查看 135关注 0票数 0

我使用下面的REGEX来有效地检查字符串是否为YYYY-MM-DD日期。

代码语言:javascript
复制
[0-9]{4}-[0-9]{2}-[0-9]{2}

我如何做相反的事情,并使用类似的REGEX来检查字符串不是此格式的日期。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-28 00:10:31

你可以使用负面的前瞻来解决这个问题:

代码语言:javascript
复制
 (?![0-9]{4}-[0-9]{2}-[0-9]{2})

编辑:在看了Lucasus的帖子后,我做了一个新的regex来进行更严格的验证。

  • 年份可以是4位数字的任意组合,例如,允许1900年前的日期
  • 月份在1-31范围内的1-12
  • 天数范围内,
  • 验证格式为YYYY-MM-DD

新的正则表达式:

代码语言:javascript
复制
(?!([0-9]{4})-([1-9]|0[1-9]|1[012])-([1-9]|0[1-9]|[12][0-9]|3[01]))
票数 1
EN

Stack Overflow用户

发布于 2011-10-28 00:34:02

您的正则表达式匹配的不只是一个有效日期(例如"3333-99-99"),您可以使用更长的表达式:

代码语言:javascript
复制
^(19[0-9][0-9]|20[0-9][0-9])-([1-9]|0[1-9]|1[012])-([1-9]|0[1-9]|[12][0-9]|3[01])$

如果想要匹配除日期之外的所有内容,请使用负面预测,就像Marcus写的那样:

代码语言:javascript
复制
^(?!((19[0-9][0-9]|20[0-9][0-9])-([1-9]|0[1-9]|1[012])-([1-9]|0[1-9]|[12][0-9]|3[01])))$

正则表达式来自this link

票数 1
EN

Stack Overflow用户

发布于 2011-10-28 00:40:22

代码语言:javascript
复制
import datetime
try:
    datetime.datetime.strptime('2011-10-27','%Y-%m-%d')
except ValueError:
    print 'The string is NOT in the right format'
else:
    print 'The string is in the right format'

事实上,这不是正则表达式,但它可能表现得更好-可能值得进行基准测试……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7918920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档