简单的js表单验证函数


Posted in Javascript onOctober 28, 2013

网站制作中,表单验证的功能是很常用的。
有些时候,用一些成型的js控件会比较方便,但是又过于庞大和难以维护(本人的js水平不高)
所以干脆自己写了一个。至于好不好,灵活不灵活,还请大家指点(先上图,很难看,请不要介意):
简单的js表单验证函数

代码:

表单验证js代码
var fv =
{
    lang: "zh-cn",  //错误提示语言
    inValidedStr: "=",  //初始随意复制,使其长度不为0
    mail: function(elementID)   //验证邮件地址合法,elementID为input文本输入框的ID
    {
        if (elementID == null) { return true; }
        else
        {
            var reg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
            if (reg.test(document.getElementById(elementID).value))
            {
                fv.inValidedStr = fv.inValidedStr.replace(/mail/g, "");
                fv.inValidedStr = fv.inValidedStr.replace("=", "");
                validMsg(fv.lang, "mail", "mailInfo");
            }
            else
            {
                fv.inValidedStr = fv.inValidedStr + "mail";
                errorMsg(fv.lang, "mail", "mailInfo");
            }
        }
    },
    username: function(elementID)   //验证用户名合法 字母数字下划线,长度为6-20
    {
        if (elementID == null) { return true; }
        else
        {
            var reg = /^[a-zA-Z0-9_]{5,19}$/;
            if (reg.test(document.getElementById(elementID).value))
            {
                fv.inValidedStr = fv.inValidedStr.replace(/username/g, "");
                fv.inValidedStr = fv.inValidedStr.replace("=", "");
                validMsg(fv.lang, "username", "usernameInfo");
            }
            else
            {
                fv.inValidedStr = fv.inValidedStr + "username";
                errorMsg(fv.lang, "username", "usernameInfo");
            }
        }
    },
    //....可以加其他验证
    isValid: function() { return (fv.inValidedStr.length == 0); }
};
//验证成功时的信息 elementID 为信息提示的html单元的id
function validMsg(lang, valueType, elementID)
{
    var msgInfo = "";
    var isCn = lang == "zh-cn";
    switch (valueType)
    {
        case "mail":
            msgInfo = isCn ? " √ 地址正确" : " √ the mail address is valided";
            break;
        case "username":
            msgInfo = isCn ? " √ 成功" : " √ The account valided ";
            break;
        case "password":
            msgInfo = isCn ? " √ 成功" : " √ Valided format!";
            break;
        //.....对应增加其他情况
        default:
            break;
    }
    document.getElementById(elementID).innerHTML = msgInfo;
    document.getElementById(elementID).style.color = "green";
}
//验证失败时的信息
function errorMsg(lang, valueType, elementID)
{
    var msgInfo = "";
    var isCn = lang == "zh-cn";
    switch (valueType)
    {
        case "mail":
            msgInfo = isCn ? " × 请输入正确的邮件地址" : " × The e-mail format is error,plz input right format .eg. abc@def.com.";
            break;
        case "username":
            msgInfo = isCn ? " × 长度6-20个字符,只能为数字,字母,下划线组成" : " × The account just ";
            break;
        case "password":
            msgInfo = isCn ? " × 密码为……" : " × inValided format!";
            break;
        //....对应增加其他情况 
        default:
            break;
    }
        document.getElementById(elementID).innerHTML = msgInfo;
        document.getElementById(elementID).style.color = "red";
}

前台代码(aspx页面):
前台aspx页面代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="Common/Js/formValid.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <script type="text/javascript">fv.lang = "en"/*如去掉此行,则默认为中文提示*/</script>
        <input type="text" name="mail" id="mail" onblur="fv.mail('mail')" /><span id="mailInfo"></span><br />
        <asp:TextBox ID="username" runat="server" onblur="fv.username('username')"></asp:TextBox><span id="usernameInfo"></span><br />
        <input type="submit" onclick="return fv.isValid()" value="Submit" />
    </div>
    </form>
</body>
</html>

然后,如果需要其他的验证,则加入即可。相关正则表达式

匹配中文字符的正则表达式: [u4e00-u9fa5] 
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 
匹配双字节字符(包括汉字在内):[^x00-xff] 
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 
匹配空白行的正则表达式:ns*r 
评注:可以用来删除空白行 
匹配HTML标记的正则表达式:< (S*?)[^>]*>.*?|< .*? /> 
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 
匹配首尾空白字符的正则表达式:^s*|s*$ 
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 
评注:表单验证时很实用 
匹配网址URL的正则表达式:[a-zA-z]+://[^s]* 
评注:网上流传的版本功能很有限,上面这个基本可以满足需求 
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 
评注:表单验证时很实用 
匹配国内电话号码:d{3}-d{8}|d{4}-d{7} 
评注:匹配形式如 0511-4405222 或 021-87888822 
匹配腾讯QQ号:[1-9][0-9]{4,} 
评注:腾讯QQ号从10000开始 
匹配中国邮政编码:[1-9]d{5}(?!d) 
评注:中国邮政编码为6位数字 
匹配身份证:d{15}|d{18} 
评注:中国的身份证为15位或18位 
匹配ip地址:d+.d+.d+.d+ 
评注:提取ip地址时有用 
匹配特定数字: 
^[1-9]d*$    //匹配正整数 
^-[1-9]d*$   //匹配负整数 
^-?[1-9]d*$
 //匹配整数 
^[1-9]d*|0$  //匹配非负整数(正整数 + 0) 
^-[1-9]d*|0$
 //匹配非正整数(负整数 + 0) 
^[1-9]d*.d*|0.d*[1-9]d*$
 //匹配正浮点数 
^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数 
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数 
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$
 //匹配非负浮点数(正浮点数 + 0) 
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$
//匹配非正浮点数(负浮点数 + 0) 
评注:处理大量数据时有用,具体应用时注意修正 
匹配特定字符串: 
^[A-Za-z]+$
//匹配由26个英文字母组成的字符串 
^[A-Z]+$
//匹配由26个英文字母的大写组成的字符串 
^[a-z]+$
//匹配由26个英文字母的小写组成的字符串 
^[A-Za-z0-9]+$
//匹配由数字和26个英文字母组成的字符串 
^w+$
//匹配由数字、26个英文字母或者下划线组成的字符串 
在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式介绍如下: 
只能输入数字:“^[0-9]*$” 
只能输入n位的数字:“^d{n}$” 
只能输入至少n位数字:“^d{n,}$” 
只能输入m-n位的数字:“^d{m,n}$” 
只能输入零和非零开头的数字:“^(0|[1-9][0-9]*)$” 
只能输入有两位小数的正实数:“^[0-9]+(.[0-9]{2})?$” 
只能输入有1-3位小数的正实数:“^[0-9]+(.[0-9]{1,3})?$” 
只能输入非零的正整数:“^+?[1-9][0-9]*$” 
只能输入非零的负整数:“^-[1-9][0-9]*$” 
只能输入长度为3的字符:“^.{3}$” 
只能输入由26个英文字母组成的字符串:“^[A-Za-z]+$” 
只能输入由26个大写英文字母组成的字符串:“^[A-Z]+$” 
只能输入由26个小写英文字母组成的字符串:“^[a-z]+$” 
只能输入由数字和26个英文字母组成的字符串:“^[A-Za-z0-9]+$” 
只能输入由数字、26个英文字母或者下划线组成的字符串:“^w+$” 
验证用户密码:“^[a-zA-Z]w{5,17}$”正确格式为:以字母开头,长度在6-18之间, 
只能包含字符、数字和下划线。 
验证是否含有^%&',;=?前台aspx页面代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="Common/Js/formValid.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <script type="text/javascript">fv.lang = "en"/*如去掉此行,则默认为中文提示*/</script>
        <input type="text" name="mail" id="mail" onblur="fv.mail('mail')" /><span id="mailInfo"></span><br />
        <asp:TextBox ID="username" runat="server" onblur="fv.username('username')"></asp:TextBox><span id="usernameInfo"></span><br />
        <input type="submit" onclick="return fv.isValid()" value="Submit" />
    </div>
    </form>
</body>
</html>

XXquot;等字符:“[^%&',;=?$x22]+” 
只能输入汉字:“^[u4e00-u9fa5],{0,}$” 
验证Email地址:“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$” 
验证InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$” 
验证电话号码:“^((d{3,4})|d{3,4}-)?d{7,8}$” 
正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”, 
“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。 
验证身份证号(15位或18位数字):“^d{15}|d{}18$” 
验证一年的12个月:“^(0?[1-9]|1[0-2])$”正确格式为:“01”-“09”和“1”“12” 
验证一个月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$” 
正确格式为:“01”“09”和“1”“31”。 
匹配中文字符的正则表达式: [u4e00-u9fa5] 
匹配双字节字符(包括汉字在内):[^x00-xff] 
匹配空行的正则表达式:n[s| ]*r 
匹配HTML标记的正则表达式:/< (.*)>.*|< (.*) />/ 
匹配首尾空格的正则表达式:(^s*)|(s*$) 
匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* 
匹配网址URL的正则表达式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)? 
(1)应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 
String.prototype.len=function(){return this.replace([^x00-xff]/g,"aa").length;} 
(2)应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现 
String.prototype.trim = function() 
{ 
return this.replace(/(^s*)|(s*$)/g, ""); 
} 
(3)应用:利用正则表达式分解和转换IP地址 
function IP2V(ip) //IP地址转换成对应数值 
{ 
re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式 
if(re.test(ip)) 
{ 
return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1 
} 
else 
{ 
throw new Error("Not a valid IP address!") 
} 
} 
(4)应用:从URL地址中提取文件名的javascript程序 
s="https://3water.com/page1.htm"; 
s=s.replace(/(.*/){0,}([^.]+).*/ig,"$2") ; //Page1.htm 
(5)应用:利用正则表达式限制网页表单里的文本框输入内容 
用正则表达式限制只能输入中文:onkeyup="value="/blog/value.replace(/["^u4E00-u9FA5]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))" 
用正则表达式限制只能输入全角字符: onkeyup="value="/blog/value.replace(/["^uFF00-uFFFF]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))" 
用正则表达式限制只能输入数字:onkeyup="value="/blog/value.replace(/["^d]/g,'') "onbeforepaste= "clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))" 
用正则表达式限制只能输入数字和英文:onkeyup="value="/blog/value.replace(/[W]/g,"'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''
Javascript 相关文章推荐
javascript中的关于类型转换的性能优化
Dec 14 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
Oct 24 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
Jan 13 Javascript
Javascript中对象继承的实现小例
May 12 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
Aug 03 Javascript
JavaScript继承学习笔记【新手必看】
May 10 Javascript
浅谈jQuery animate easing的具体使用方法(推荐)
Jun 17 Javascript
angularjs实现柱状图动态加载的示例
Dec 11 Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 Javascript
小程序使用wxs解决wxml保留2位小数问题
Dec 13 Javascript
React中使用Vditor自定义图片详解
Dec 25 Javascript
自己写的Javascript计算时间差函数
Oct 28 #Javascript
Textarea根据内容自适应高度
Oct 28 #Javascript
将json当数据库一样操作的javascript lib
Oct 28 #Javascript
一个JavaScript变量声明的知识点
Oct 28 #Javascript
Javascript实现页面跳转的几种方式分享
Oct 26 #Javascript
javascript中简单的进制转换代码实例
Oct 26 #Javascript
javascript通过navigator.userAgent识别各种浏览器
Oct 25 #Javascript
You might like
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
PHP实现微信发红包程序
2015/08/24 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
jQuery中:button选择器用法实例
2015/01/04 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
js和jquery分别验证单选框、复选框、下拉框
2015/12/17 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
python list转dict示例分享
2014/01/28 Python
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
高级Java程序员面试题
2016/06/23 面试题
艺术系应届生的自我评价
2013/10/19 职场文书
行政助理岗位职责
2013/11/10 职场文书
文秘人员工作职责
2014/01/31 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
目标责任书范文
2014/04/14 职场文书
青春励志演讲稿
2014/04/29 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
机械专业毕业生自我鉴定2014
2014/10/04 职场文书
大学生求职自荐信
2015/03/24 职场文书
起诉书格式范文
2015/05/20 职场文书
赢在中国观后感
2015/06/02 职场文书