利用正则表达式检查时间的合法性

168 篇文章 6 订阅

利用正则表达式检查时间的合法性

左直拳

许多时候,少不得要检测一下用户输入的时间格式是否正确。对于B/S结构程序而言,既可以在服务器端检查,也可以在浏览器端检查,将错误封杀于提交之前,免得拿这些小事去烦服务器。

我有个WEB应用程序,需要在一个datagrid里面输入时间。决定在提交前检测时间合法性。

思路如下:

1、                   设置一个可使用自定义的javascript函数的数据检查控件CustomValidator指向时间输入文本框txtTime

2、                   编写一个检测时间的javascript函数CheckTime

3、                   CustomValidator的属性ClientValidatorFunction设为CheckTime

关键是函数CheckTime该怎么写。

用正则表达式。

正则表达式是个好东西,看起来相当复杂,却真的很好用(痘痘真的不再长)。比如,检测邮箱合法性,用的就是一串长长的,神秘的正则表达式。

时间的格式形如:hh:mm。除了分隔符“:”外,只能是数字。并且小时不能>23,分钟不能>59。构造正则表达式如下:

var pattern = /(/d|([0-1]/d)|(2[0-3])):(/d|([0-5]/d))/;

其中,“/d”代表0~9的任意一位数字;“|”表示“或”的关系;“()”就跟平常用的括号没什么两样。用意很明显。

可是在测试的时候发现,象9:8967:5ab01:00这样的串放上去都显示合法。原来是没有标明串的开头和结尾,比如9:89,其中9:8确实是符合表达式的,并没有错。加上开头标志符“^”和结尾标志符“$”就搞定了。修正后的正则表达式

var pattern = /^(/d|([0-1]/d)|(2[0-3])):(/d|([0-5]/d))$/;

完整的检测时间函数

//检测时间的合法性

function CheckTime(source,args)

{

       var time = args.Value;

       var pattern = /^(/d|([0-1]/d)|(2[0-3])):(/d|([0-5]/d))$/;

       if( time != "" && !pattern.test(time) )

       {

              args.IsValid = false;

              return;

       }

       args.IsValid = true;

}

//java正则表达式数字验证 public boolean isNumber(String str) { java.util.regex.Pattern pattern=java.util.regex.Pattern.compile("[0-9]+(.[0-9]+)?"); java.util.regex.Matcher match=pattern.matcher(str); if(match.matches()==false) { return false; } else { return true; } } ------------------------------------------------------------------------------------------------------ [removed] function validate(){ var reg = new RegExp("^[0-9]*$"); var obj = document.getElementById("name"); if(!reg.test(obj.value)){ alert("请输入数字!"); } if(!/^[0-9]*$/.test(obj.value)){ alert("请输入数字!"); } } [removed] ------------------------------------------------------------------------------------------------------ 验证数字的正则表达式集 验证数字:^[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]*$ 验证非负整数(正整数 + 0) ^\d+$ 验证非正整数(负整数 + 0) ^((-\d+)|(0+))$ 验证长度为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之间,只能包含字符、数字和下划线。 验证是否含有 ^%&',;=?$\" 等字符:[^%&',;=?$\x22]+ 验证汉字:^[\u4e00-\u9fa5],{0,}$ 验证Email地址:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$ 验证InternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$ 验证电话号码:^(\(\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。 整数:^-?\d+$ 非负浮点数(正浮点数 + 0):^\d+(\.\d+)?$ 正浮点数 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ 非正浮点数(负浮点数 + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 负浮点数 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ 浮点数 ^(-?\d+)(\.\d+)?$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值