Mvc 2.0 Preview2 增加了客户端验证的功能,但实际使用中,有同事发现正则表达式验证日期输入时,客户端验证成功,而服务端验证总失败。

   检查同事的代码,并没有发现明显的问题:(注,此处正则表达式经过简化)

[RegularExpression("^20\d\d-\d?\d-\d\d$")]
object somedate {get;set;}

  运行,在文本框中输入 2009-12-30 ,服务端提示正则表达式匹配失败。

  不解,反编译RegularExpressionAttribute,其中IsValidate代码如下:


public override bool IsValid(object value)
{
    
string str = Convert.ToString(value, CultureInfo.CurrentCulture);
    
if (string.IsNullOrEmpty(str))
    {
        
return true;
    }
    Match match 
= this.Regex.Match(str);
    
return ((match.Success && (match.Index == 0)) && (match.Length == str.Length));
}

  终于发现问题,原来,日期数据被Convert.ToString后,生成的日期是带时间的,如:2009-12-30 0:00:00,所以正则匹配总是失败。因此,匹配日期的时候,应该为正则表达式留出时间数据的位置。这一点,WebForm和Mvc都是一致的。

 

相关文章:

  • 2022-02-09
  • 2021-06-30
  • 2021-07-03
  • 2022-12-23
  • 2021-11-12
  • 2021-05-25
  • 2021-07-29
  • 2021-05-16
猜你喜欢
  • 2021-09-21
  • 2022-12-23
  • 2022-01-21
  • 2021-07-09
  • 2022-01-29
  • 2021-10-11
  • 2021-09-30
相关资源
相似解决方案