发表于: 2017-06-29 22:32:15
2 1068
正则表达式
编写验证规则最流行和最简单的方法就是正则表达式了,但唯一的一个问题是正则表达式的语法太隐晦了,让人蛋疼无比。很多开发者为了在项目中应用复杂的验证,经常要使用一些小抄来记住正则式的复杂语法和各种常用命令。
正则表达式基础
正则表达式可以帮助我们更好的描述复杂的文本格式。一旦你描述清楚了这些格式,那你就可以利用它们对文本数据进行检索、替换、提取和修改操作。其实说白了就是对字符串进行操作,一个简单的应用就是邮箱验证。
开始正则表达式
1 第一步要引用相关的正则式的明明空间
- using System.Text.RegularExpressions;
2 第二步就是用指定的正则表达式构建一个正则表达式对象。下面是用来搜索长度为10的a-z的字母
- Regx obj = Regx("[a-z]{10}");
3 最后根据正则式在指定数据中匹配项,如果匹配IsMatch方法就会返回true
- MessageBox.show(obj.IsMatch("hellochina").ToString());
三个重要的正则式命令
记住正则语法最好的办法就是记住这三样东西:Bracket(括号), caret(插入符号)和Dollars(美元符号)。
B
在正则表达式中有3种类型的括号
方括号 “[“和花括号“{“ 。
方括号"["内是需要匹配的字符,花括号"{"内是指定匹配字符的数量。
圆括号“(“ 则是用来分组的。
C
插入符号 “^” 表示正则式的开始。
D
美元符号“$” 表示正则式的结束。
现在你知道上面的3个语法后,你就可以写世界上任何一条验证规则了。比如下面的例子就很好的说明了上面3条正则语法是如何协调运作的。
简单应用
让我们开始第一个验证,输入的字符在a-g之间?
- [a-g]
输入的字符在a-g之间并且最大长度为3最小长度为1?
- [a-g]{1,3}
我如何在匹配像91230456, 01237648那样的固定8位数?
- ^[0-9]{8}$
如何验证像LJI1020那样的发票编号,前3个是字母剩余为8位长度的数字?
- ^[a-z]{3}[0-9]{7}$
我们可以验证简单的网址URL格式吗?
- ^www[.][a-z]{1,15}[.](com|org)$
验证值在0-25的数字:
- ^[0-9] | ( [0][9][0][9] ) | ( [0-2][0-5])$
快捷命令
[0-9]:d;[a-z][0-9][_]:w;0次或多次发生:*;至少一次发生:+;0次或1次发生:?
1、任务编辑Article状态下,提交按钮接口报错(postman一样),暂时没找到原因(其他师兄相同接口正常),由于只剩这一个提交没有完成,暂时放一下,做后面的表单验证及富文本。
2、提交按钮,增加ng-disabled属性,form1为form表单name属性,form1.$invalid表示整个表单存在错误输入时禁用。注意需要单独增加ng-class样式(或者应用bs插件),否则原生禁用按钮样式不会改变,只是不能点击。
<button type="submit" ng-click="submitDraft()" ng-class="{'ng-disabled':form1.$invalid}" ng-disabled="form1.$invalid">存为草稿</button>
//css样式
.ng-disabled {cursor: not-allowed;opacity: 0.6}
3、标题栏样式为text,只设置了长度4-32,点击后必填,错误状态时外框变红,文字变红,同时下面弹出提示信息。
4、行业大图对应的子选项下拉框
<select ng-show="type=='行业大图'" ng-required="type=='行业大图'" style="margin-left: .5em;" name="industry" id="industry" ng-model="industry">
使用nf-show判定子选框的显示和隐藏时,由于本身dom存在(display为none),直接使用required属性,会导致子选框隐藏状态下,表单的disabled始终无法提交,所以增加了ng-required进行判定。
使用ng-if时,由于是dom直接移除,可以直接使用required属性,但是后面会影响双向绑定数据的读取,所以这里还是使用的ng-show。
5、说明框暂时未加限制,后面需要使用富文本。
6、url框,使用type=”url”,增加报错样式和文本报错提示框。
收获:看了富文本资料,基于JQ的高级模式文本输入框,使用上手应该不困难。重新做了文本框验证,学习了下拉框的一些属性特征。看了正则表达式,确实深奥难懂,没有结合实际应用,理解还是太困难。
困难:系列任务终于快结束了,整体代码还是写的很乱,封装和自定义好像都没有完全应用,接下来有时间会多了解相关知识并优化代码。
计划:完成任务基本功能布局,优化代码。
评论