使用正则表达式进行验证
本文关键字:验证 正则表达式 | 更新日期: 2023-09-27 17:58:41
我在ASP.net MVC项目中使用RegularExpression属性时遇到一些问题。
它似乎在客户端工作,当它合适时就会消失,但是在发布操作时,会检查模型状态是否有效,最终发布错误,必须遵循正则表达式。
我试过以下几种:
^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4} [0-9]{1,2}:[0-9]{1,2}$
^'d{1,2}/'d{1,2}/'d{4} 'd{1,2}:'d{1,2}$
本质上,它必须捕捉14/12/2014 14:20作为输入。
有什么想法吗?我迷路了。
型号:
[Required]
[Display(Name = "TimeDisplay", ResourceType = typeof(Resources.Models.Log))]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
[RegularExpression(@"^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4} [0-9]{1,2}:[0-9]{1,2}$")]
public DateTime Time { get; set; }
控制器动作:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Log log)
{
if (ModelState.IsValid)
{
db.Logs.Add(log);
db.SaveChanges();
TempData["Notification"] = AlertGenerator.GenerateAlert(AlertGenerator.Level.Success, "Success! Log Saved");
return RedirectToAction("Index");
}
return View(log);
}
正如我所知,MVC将使用当前的CultureInfo(服务器上)来解析DateTime格式,因此您不能直接将"dd/MM/yyyy HH:MM"绑定到您的实体。
我的解决方案是创建ViewModel,然后使用DateTime。ParseExact(…)解析日期:
型号:
[Display(Name = "TimeDisplay", ResourceType = typeof(Resources.Models.Log))]
[Required]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy HH:mm}")]
public DateTime Time { get; set; }
ViewModel
[Display(Name = "TimeDisplay", ResourceType = typeof(Resources.Models.Log))]
[Required]
public string Time { get; set; }
控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(LogViewModel logViewModel)
{
if (ModelState.IsValid)
{
// convert from ViewModel to Entity Model
Log log = new Log(logViewModel);
// parse the time
log.Time = DateTime.ParseExact(logViewModel.Time, "dd/MM/yyyy HH:mm", null);
db.Logs.Add(log);
db.SaveChanges();
TempData["Notification"] = AlertGenerator.GenerateAlert(AlertGenerator.Level.Success, "Success! Log Saved");
return RedirectToAction("Index");
}
return View(log);
}