表单验证是一个网站或应用的重点,一条合适的错误提示不仅可以减少无效信息录入,更会给用户留下良好的使用体验。但表单设计千差万别,用户输入更不可控。一方面,我们要减少出错提示(这会引起用户反感),而另一方面,我们则希望得到足够多的有效信息。鱼和熊掌如何兼得?
写一个简单的表单验证:http://www.cnblogs.com/fayin/p/6599331.html
从Google中,我们可以找到一些实用的方法:
- 设计合适的提示信息;
- 正则表达式筛选错误输入。
如何将错误信息合适的展示给用户,我想是见仁见智,需要根据具体项目具体分析(参考淘宝、京东等电商设计)。这里主要讨论第二种方案:通过正则表达式最大限度的过滤用户输入
这里先列出我自己常用的正则表达式,然后在深入全面的学习它!
常用正则表达式
文本输入(拒绝表情):/^[u4e00-u9fa5w]+.*$/gi
密码: /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/
中文地址(以中文开始,包含英文字符、数字、括号):/^([u4e00-u9fa5])+[u4e00-u9fa5a-zA-Z0-9()()]*$/
身份证:/^d{6}(18|19|20)?d{2}(0[1-9]|1[12])(0[1-9]|[12]d|3[01])d{3}(d|X)$/i
电子邮箱:/^[A-Za-z0-9u4e00-u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/
传真:/^(d{3,4}-)?d{7,8}$/
网址:/^([hH][tT]{2}[pP]://|[hH][tT]{2}[pP][sS]://)*(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~/])+$/
座机:/^((d{3,4})|d{3,4}-|s)?d{7,14}$/
手机:/^1[34578]d{9}$/
邮编:/^[1-9][0-9]{5}$/
通用验证信息提示函数
/**
* @param {Object} $input 需要验证的输入项
* @param {String} reg 正则表达式
* @param {String} tips 提示信息
*/
function isInfoValid($input, reg, tips) {
var val = $input.val().trim();
if(val == '') {
$input.next().remove();
$input.after('<span class="valid-error">*'+$input.siblings("label").text().trim()+'不能为空!<span>')
}
else if(reg && tips && !reg.test(val)) {
$input.next().remove();
$input.after('<span class="valid-error">'+ tips +'</span>')
}else {
$input.next().remove();
}
}
// 可以这样使用
isInfoValid($zipCode, /^[1-9][0-9]{5}$/, '*请输入正确的邮编!');
深入学习正则表达式
1. RegExp
对象
有两种方法实例化RegExp
对象
-
字面量
var reg = /is/g; // 全局匹配单词is
-
构造函数
var reg = new RegEXP('\bis\b',g)
2. 修饰符
-
g:global全文搜索,不添加,搜索到第一个匹配停止 默认false,只读
-
i:ignore case 忽略大小写, 默认false,只读
-
m:multiple lines 多行搜索 默认false,只读
-
lastIndex: 是当前表达式匹配内容的最后一个字符的下一个位置
-
source:正则表达式的文本字符串
> var reg1 = /w/gim; > reg1.source < "w"
3. 元字符
正则表达式由两种基本字符类型组成:
-
原义文本字符
a,b,c,d..
-
元字符
*+?$ ^ . | ( ){ } [ ]
水平制表符 v 垂直制表符 换行符 回车符