【问题标题】:Using a regular expression to validate credit card month and year使用正则表达式验证信用卡月份和年份
【发布时间】:2016-03-04 09:48:13
【问题描述】:

我在验证模型中的几个字段时遇到了一些问题,即信用卡的到期月份和年份。

我这个月需要的模式显然是:

1-12

我对这一年的要求是:

0-99

我在我的模型中设置了正则表达式,如下所示:

        [UmbracoRequired("Booking.Validation.Required")]
        [UmbracoRegularExpression("Booking.Validation.CreditMonthFormat", "[1-12]")]
        public int booking_expirymonth { get; set; }

        [UmbracoRequired("Booking.Validation.Required")]
        [UmbracoRegularExpression("Booking.Validation.CreditYearFormat", "[0-99]")]
        public int booking_expiryyear { get; set; }

日期选择是通过视图中的两个选择字段进行的:

月份

01、02、03、04 等

年份

01、02、03

但是,当它进入控制器时,它会去除前导零。我对此并不太在意,因为我可以稍后处理它,但问题是即使传递的值完全有效,当模型到达 !ModelState.IsValid 检查时,它总是被视为无效。

我查看了 VS 中的代码,可以看到它收到的年份为“17”,表明它是一个字符串,但是当我查看实际模型值的值时,它被视为一个 int。

谁能帮我解决这个问题,因为它让我发疯。

【问题讨论】:

  • 我只会将它们保存为字符串并在需要值时解析它们。前导零永远不会被保存。
  • 就像我说的那样,我并不关心前导零是否存在。当传递的值完全有效时,我更担心它无法正确验证。我也不想从模型中删除验证,因为这是应该完成的方式。

标签: c# .net model umbraco data-annotations


【解决方案1】:

对于 01-12 使用以下正则表达式

0[1-9]|1[0-2]    

这适用于 01,02,03...12

1-12岁使用

[2-9]|1[0-2]?

这适用于 1,2..

& 01-99 年

^(0?[1-9]|[1-9][0-9])$

【讨论】:

  • 我在这里测试过这些 regexhero.net/tester 不幸的是,多年来的最后一个不起作用
  • 你的测试字符串是什么?
  • 按顺序排列的所有数字。多年来,我实际上是自己找到了这个想法:[0-9]{1,2}
  • @jezzin 太棒了。
  • @user2148124 您可以根据您的情况将[0-9]{1,2} 替换为\d\d
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 2010-11-30
  • 2015-09-14
  • 2018-08-15
  • 2020-09-18
相关资源
最近更新 更多