好久都没有写博客,最近工作中没有什么可写的,公司的项目是以业务为重,技术含量实在不咋的。这次sprint中有一个要求就是password必须一些规则,比如给你一些正则表达式必须满足几个,直接看效果吧

代码如下:

namespace System.ComponentModel.DataAnnotations
{using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Runtime.CompilerServices;using Text.RegularExpressions;    using Globalization;[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)]public class MultipleRegularExpressionAttribute : ValidationAttribute, IClientValidatable{public MultipleRegularExpressionAttribute(string[] patterns,int minMatchNo){if (patterns == null || patterns.Length < 1){throw new ArgumentNullException("patterns");}if (minMatchNo <= 0){throw new ArgumentException("minValidCount must bigger than 0"); }MinMatchNo = minMatchNo;Regexs = new Regex[patterns.Length];for (int i = 0; i < patterns.Length; i++){Regexs[i] = new Regex(patterns[i]);}}public override string FormatErrorMessage(string name){if (!string.IsNullOrEmpty(ErrorMessage)){return ErrorMessage; }string message = "the input value must match " + MinMatchNo.ToString() + " below Regex:";foreach (var item in Regexs){message += " \""+item.ToString() + "\" ;";}return message;}public override bool IsValid(object value){string str = Convert.ToString(value, CultureInfo.CurrentCulture);if (string.IsNullOrEmpty(str)){return true;}int validedCount = 0;foreach (var reg in Regexs){Match match = reg.Match(str);if ((match.Success && (match.Index == 0)) && (match.Length == str.Length))validedCount += 1;}return validedCount>= MinMatchNo;}private Regex[] Regexs { set; get; }private int MinMatchNo { set; get; }public IEnumerable<ModelClientValidationRule>   GetClientValidationRules(ModelMetadata metadata, ControllerContext context){var validationRule = new ModelClientValidationRule{ErrorMessage = FormatErrorMessage(metadata.DisplayName),ValidationType = "mulregular",};validationRule.ValidationParameters.Add("minmatchno", MinMatchNo);validationRule.ValidationParameters.Add("regexs", string.Join(",",Regexs.Select(x=>x.ToString()).ToArray()));yield return validationRule;}}
}

  

<script type="text/javascript" src="~/Scripts/jquery-1.10.2.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.validate.js"></script>
<script type="text/javascript" src="~/Scripts/jquery.validate.unobtrusive.js"></script>
<script type="text/javascript">$(function () {//第一个参数是jquery验证扩展方法名//第二个参数与rule.ValidationParameters["XXX"]中的key对应//option是指ModelClientValidationRule对象实例jQuery.validator.unobtrusive.adapters.add('mulregular', ['regexs', 'minmatchno'], function (options) {options.rules["mulregular"] = {regexs: options.params.regexs,minmatchno: options.params.minmatchno};if (options.message) {options.messages['mulregular'] = options.message;}});//意思是表单值为空时也能通过验证//但,如果表单有值,就必须满足||后面的条件,否则返回falsejQuery.validator.addMethod('mulregular', function (value, element, param) {if (this.optional(element)) {return true;}var regs = param["regexs"].split(",");var minmatchno = param["minmatchno"] - 0;for (var i = 0; i < regs.length; i++) {var match = new RegExp(regs[i]).exec(value);if (match && (match.index === 0) && (match[0].length === value.length)) {minmatchno -= 1;}}return minmatchno <= 0;});});
</script>

  

[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
[MultipleRegularExpression( new string[] {".*[a-z]+.*",".*[A-Z]+.*",".*\\d+.*",".*(\\W+|_+).*" },3)]
public string Password { get; set; }

这里有几个注意的地方:

1.GetClientValidationRules 方法里面ValidationType和ValidationParameters的key只能是全部小写

2.只有在 jQuery.validator.unobtrusive.adapters 方法中定义了的参数 ['regexs', 'minmatchno'] 才能在 jQuery.validator.addMethod 对应的方法mulregular 中使用。

网上的案例已经有很多了,大家也可以参考:

http://www.cnblogs.com/yehuabin/archive/2012/09/23/unobtrusive-validation.html

http://www.cnblogs.com/xcsn/p/4666718.html

http://www.cnblogs.com/xfrog/archive/2011/01/25/1944867.html

MultipleRegularExpressionAttribute MVC中扩展自定义验证规则相关推荐

  1. Element UI 表单在el-form-item中使用自定义验证规则

    1:官网示例 <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleFo ...

  2. ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

    ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需要将相应的ValidationAttri ...

  3. 后盾网lavarel视频项目---自定义验证和自定义验证规则

    后盾网lavarel视频项目---自定义验证和自定义验证规则 一.总结 一句话总结: 1.自定义验证就是用的自定义验证请求类:php artisan make:request AdminPost 2. ...

  4. yii2中的rules 自定义验证规则详解

    yii2的一个强大之处之一就是他的Form组件,既方便又安全.有些小伙伴感觉用yii一段时间了,好嘛,除了比tp"难懂"好像啥都没有. 领导安排搞一个注册的功能,这家伙刷刷刷的又是 ...

  5. 教你三种Model(AR)中自定义验证规则的方法

    2019独角兽企业重金招聘Python工程师标准>>> 各位Yii2兄弟都知道Model的rules里面可以使用自己定义的验证规则,我们今天就把自定义规则做一个总结,进行一次彻底的知 ...

  6. Easyui validatebox修改——1.当text发生变化时在校验,2.取消校验,3扩展自定义验证

    1.当text发生变化时在校验: Easyui validatebox个人感觉还是比较好用的,但是发现他不是只有text改变并离开编辑框的时候才验证,而是不停的做验证:如果是js脚本的本地验证还好,如 ...

  7. easyui的validatebox重写自定义验证规则的几个实例

    validatebox已经实现的几个规则: 验证规则是根据使用需求和验证类型属性来定义的,这些规则已经实现(easyui API): email:匹配E-Mail的正则表达式规则. url:匹配URL ...

  8. validatebox自定义验证规则以及使用

    //===============jsp======state====//开启验证<script type="text/javascript"> ​​​​​​​yZ() ...

  9. php验证法则是10位数字,自定义验证规则

    > ## 设置验证规则 ``` // 1.数组传入(针对在控制器中定义验证) $rules = [ 'name' => 'require|max:25', 'age' => 'num ...

最新文章

  1. 关于人工智能中强化学习的扫盲
  2. 免费教材丨第55期:Python机器学习实践指南、Tensorflow 实战Google深度学习框架
  3. 可怕!315 曝光 50 多款App“窃听”:这条黑色产业链,有人靠你的隐私年赚千万...
  4. 一加7t人脸识别_一加7T跑分及配置信息曝光;新款iPad Pro曝光增加3D ToF镜头
  5. css3整理--border-radius
  6. Ten Must-Have Tools Every Developer Should Download Now-----CodeSimth
  7. React开发(118):报错处理
  8. 软件工程和计科专业对比,哪一个更适合毕业做程序员?
  9. python越来越慢_为什么我的算法越来越慢?
  10. [jQuery]回到顶部
  11. jquery easyui-----------tree
  12. 哈工大SCIR Lab | EMNLP 2019 结合单词级别意图识别的stack-propagation框架进行口语理解...
  13. 介绍Unity中相机的投影矩阵与剪切图像、投影概念
  14. 格雷码Gray Code详解
  15. win7系统蓝屏修复工具如何使用
  16. 雨滴win7计算机路径,win7系统设置雨滴桌面(Rainmeter)开机自启动的操作方法
  17. 基于物联网技术的3DGIS智慧园区信息系统研究
  18. Python应用|TOPSIS综合评价法与案例分析
  19. 计算机开机键盘屏幕无反应,戴尔电脑开机键亮但为什么屏幕没有反应
  20. 破解win7开机密码

热门文章

  1. 启动Virtual User Generator提示ArgumentNullException:值不能为null
  2. 从测试用例角度来看传统测试人员更专业?
  3. 张凯院 矩阵论学习_有限群表示论(0): 前言
  4. mysql模糊查询 or_mysql 模糊查询 - yizhichao的个人页面 - OSCHINA - 中文开源技术交流社区...
  5. 计算机辅导资料,计算机基础辅导资料.doc
  6. html5 audio js控制进度,HTML5 audio标签使用js进行播放控制实例
  7. mysql5.7.11无法启动_MySQL5.7.11免安装版的安装和配置:解决MYSQL 服务无法启动问题...
  8. VGG使用重复元素的网络
  9. 如何做相册_苹果手机相册不想让人看怎么办?看这里教你加密
  10. a*算法的优缺点_垃圾回收的常见算法