在我的MVC3应用程序中,我将其中一个实体的出生日期保存为字符串。为什么?因为我的应用程序允许存储长期死亡的人的出生日期,例如。苏格拉底,柏拉图,伊壁鸠鲁等等,据我所知DateTime类不允许。RegEx字符串验证器
现在显然我们不知道Epicurus出生的确切日期,例如我们刚刚知道出生年份[341 BCE],所以我想要做的是构建一个自定义验证器,它将验证对于出生日期输入字符串,并确保它们都符合以下格式:
12 Feb 1809
Feb 1809
341
341 BCE
Oct 341 BCE
11 Mar 5 BCE
我将不胜感激,如果有人能帮助我用正则表达式将匹配任何以上的,当然不匹配其他任何东西。
我一直在尝试了几个小时,而不是在任何地方获得:■
UPDATE响应提供的答案:
非常感谢你的家伙,我希望我是不如你很多在建立RegExes!由于我的应用程序是使用ASP.net MVC3,我想坚持.NET RegEx类(为了方便起见)。
luastoned答案似乎工作!我似乎无法打破它所有的测试数据。
但有一件事,我可以让BC吗?导致一些人使用BC和其他人使用BCE <会是可能的吗?而且......我说对了,正则表达式不能用BCE代替BC吗?我必须通过我的C#代码手动执行该操作吗?正则表达式只会匹配或不正确。
更新两个:
M42的正则表达式似乎是更好的工作。我刚刚复制了它并将其用于我的Custom Validator(下面的PasteBin链接中的代码)。
谢谢。
为什么'(BCE | \ d {4} )?'? (BCE)“应该是足够的,因为”BCE“是最后一个(OP中的例子分别是”1809“,”1809“,”341“,”341“,”341“和”5“是BCE。) – jensgram 2011-12-21 10:03:51
你是对的 - 修好了,谢谢。 – luastoned 2011-12-21 10:06:34
符合:'“”' - 包含单个空格的字符串。表达式还应该有'^'和'$'锚点。 – ridgerunner 2011-12-21 17:27:00