日期正则表达式

日期正则表达式
日期正则表达式

日期正则表达式~转

2009-03-29 19:17

一、简单的

日期判断(YYYY/MM/DD):^\d{4}(\-|\/|\.)

\d{1,2}\1\d{1,2}$

二、演化的日期判断(YYYY/MM/DD|

YY/MM/DD):

^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}

$)|(^\d{4}年\d{1,2}月\d{1,2}日$)$

三、加入闰年的判断的:

实例:

^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1 [02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]

\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]| [12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?

[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]| [2468][048]|[13579][26])|((16|[2468][048]| [3579][26])00))-0?2-29-))$

分析:

1、什么是合法的日期范围?对于不同的应用场景,这个问题有不同的解释。这里采纳MSDN中

的约定:

DateTime值类型表示值范围在公元(基督纪元

)0001 年 1 月 1 日午夜12:00:00 到公元

(C.E.) 9999 年12 月31 日晚上11:59:59 之间的日期和时间。

2、关于闰年的阐释。

关于公历闰年是这样规定的:地球绕太阳公转

一周叫做一回归年,一回归年长365日5时48分46秒。因此,公历规定有平年和闰年,平年一

年有365日,比回归年短0.2422日,四年共短

0.9688日,故每四年增加一日,这一年有366日,就是闰年。但四年增加一日比四个回归年又

多0.0312日,400年后将多3.12日,故在400年中少设3个闰年,也就是在400年中只设97个闰年,这样公历年的平均长度与回归年就相近似了。

由此规定:年份是整百数的必须是400的倍数才是闰年,例如1900年、2100年就不是闰年。

首先需要验证年份,显然,年份范围为0001 - 9999,匹配YYYY的正则表达式为:

[0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]

{1}[1-9][0-9]{2}|[1-9][0-9]{3}

其中[0-9] 也可以表示为\d,但\d 不如[0-9] 直观,因此下面我将一直采用[0-9]

用正则表达式验证日期的难点有二:一是大小

月份的天数不同,二是闰年的考虑。

对于第一个难点,我们首先不考虑闰年,假设2 月份都是28天,这样,月份和日期可以分成三

种情况:

1、月份为1, 3, 5, 7, 8, 10, 12,天数范围为

01 - 31,匹配MM-DD的正则表达式为:

(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])

2、月份为4, 6, 9, 11,天数范围为01-30,匹

配MM-DD的正则表达式为:

(0[469]|11)-(0[1-9]|[12][0-9]|30)

3、月份为2,考虑平年情况,匹配MM-DD的正则表达式为:

02-(0[1-9]|[1][0-9]|2[0-8])

根据上面的成果,我们可以得到匹配平年日期

格式为YYYY-MM-DD的正则表达式:

([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]

{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]

|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]

|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1]

[0-9]|2[0-8])))

接着我们来解决第二个难点:闰年的考虑。根

据闰年的定义,我们可以将闰年分为两类:

1、能被4整除但不能被100整除的年份。寻找后两位的变化规律,可以很快得到下面的正则匹配:

([0-9]{2})(0[48]|[2468][048]|[13579][26])

2、能被400整除的年份。能被400整除的数肯定能被100整除,因此后两位肯定是00,我们只要保证前两位能被4整除即可,相应的正则表达式为:

(0[48]|[2468][048]|[3579][26])00

2.最强验证日期的正则表达式,添加了闰年的验证

这个日期正则表达式支持

YYYY-MM-DD

YYYY/MM/DD

YYYY_MM_DD

YYYY.MM.DD的形式

match : 2008-2-29 2008/02/29

not match : 2008-2-30 2007-2-29

完整的正则表达式如下:

((^((1[8-9]\d{2})|([2-9]\d{3}))([-\/\._])

(10|12|0?[13578])([-\/\._])(3[01]|[12][0-9] |0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3})) ([-\/\._])(11|0?[469])([-\/\._])(30|[12][0-9] |0?[1-9])$)|(^((1[8-9]\d{2})|([2-9]\d{3})) ([-\/\._])(0?2)([-\/\._])(2[0-8]|1[0-9]|0?[1- 9])$)|(^([2468][048]00)([-\/\._])(0?2)([-\/ \._])(29)$)|(^([3579][26]00)([-\/\._])(0?2) ([-\/\._])(29)$)|(^([1][89][0][48])([-\/\._]) (0?2)([-\/\._])(29)$)|(^([2-9][0-9][0][48]) ([-\/\._])(0?2)([-\/\._])(29)$)|(^([1][89] [2468][048])([-\/\._])(0?2)([-\/\._])(29)$)| (^([2-9][0-9][2468][048])([-\/\._])(0?2)([-\/ \._])(29)$)|(^([1][89][13579][26])([-\/\._]) (0?2)([-\/\._])(29)$)|(^([2-9][0-9][13579]

[26])([-\/\._])(0?2)([-\/\._])(29)$))

闰年的2月份有29天,因此匹配闰年日期格式为YYYY-MM-DD的正则表达式为:

(([0-9]{2})(0[48]|[2468][048]|[13579][26])

|((0[48]|[2468][048]|[3579][26])00))-02-29

最后,将平年和闰年的日期验证表达式合并,

我们得到最终的验证日期格式为YYYY-MM-DD 的正则表达式为:

(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]

{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]

|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]

|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1]

[0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468]

[048]|[13579][26])|((0[48]|[2468][048]|

[3579][26])00))-02-29)

DD/MM/YYYY格式的正则验证表达式为:(((0[1-9]|[12][0-9]|3[01])/((0[13578]|1 [02]))|((0[1-9]|[12][0-9]|30)/(0[469]|11))|

(0[1-9]|[1][0-9]|2[0-8])/(02))/([0-9]{3}[1-

9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]

{2}|[1-9][0-9]{3}))|(29/02/(([0-9]{2})(0 [48]|[2468][048]|[13579][26])|((0[48]| [2468][048]|[3579][26])00)))

正则表达式语言 - 快速参考

正则表达式语言?-?快速参考 正则表达式是正则表达式引擎尝试匹配输入文本的一种模式。?模式由一个或多个字符文本、运算符或构造组成。 字符转义 正则表达式中的反斜杠字符?(\)?指示其后跟的字符是特殊字符(如下表所示),或应按原义解释该字符。?有关更多信息,请参见正则表达式中的字符转义。

字符类 字符类与一组字符中的任何一个字符匹配。?字符类包括下表中列出的语言元素。?有关更多信息,请参见正则表达式中的字符类。

定位点 定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。?下表中列出的元字符是定位点。?有关更多信息,请参见正则表达式中的定位点。 分组构造描述了正则表达式的子表达式,通常用于捕获输入字符串的子字符串。?分组构造包括下表中列出的语言元素。?有关更多信息,请参见正则表达式中的分组构造。

限定符 限定符指定在输入字符串中必须存在上一个元素(可以是字符、组或字符类)的多少个实例才能出现匹配项。?限定符包括下表中列出的语言元素。?有关更多信息,请参见正则表达式中的限定符。

反向引用构造 反向引用允许在同一正则表达式中随后标识以前匹配的子表达式。?下表列出了?.NET?Framework?的正则表达式支持的反向引用构造。?有关更多信息,请参见正则表达式中的反向引用构造。 替换构造用于修改正则表达式以启用?either/or?匹配。?这些构造包括下表中列出的语言元素。?有关更多信息,请参见正则表达式中的备用构造。

替换 替换是替换模式中支持的正则表达式语言元素。?有关更多信息,请参见正则表达式中的替代。?下表中列出的元字符是原子零宽度断言。 正则表达式选项 可以指定控制正则表达式引擎如何解释正则表达式模式的选项。?其中的许多选项可以指定为内联(在正则表达式模式中)或指定为一个或多个?RegexOptions?常量。?本快速参考仅列出内联选项。?有关内联和?RegexOptions?选项的更多信息,请参见文章正则表达式选项。 可通过两种方式指定内联选项: 通过使用杂项构造(?imn s x-imn s x),可以用选项或选项组前的减号?(-)?关闭这些选项。?例如,(?i-mn)?启用不区分大小写

csharp正则表达式

学习笔记:正则表达式 2011-8-29 一.正则表达式 正则表达式(Regex)是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现。 一个正则表达式就是由普通的字符及特殊字符(称为元字符符)组成的文字模式。该模式秒杀在查找文章主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 正则表达式的常用元字符(全为英文状态,注意可以代表的字符种类和个数): 元字符含义 .(点) 可以匹配除”\n”外的任意一个字符 [](中括号) 可以匹配中括号内的任意一个字符 例如,"[abc]" 匹配"plain"中的"a" |(或符号) 可以匹配或符号两边的任意一个字符,优先级比较低 匹配x 或y。例如"z|food" 可匹配"z" 或"food"。 正则表达式的常用限定符(全为英文状态): 元字符含义 *(星号) 其限定的表达式出现次数等于或大于0次 例如,"zo*"可以匹配"z"、"zoo" +(加号) 其限定的表达式至少出现1次 例如,"zo+"可以匹配"zoo",但不匹配"z" ?(问号) 其限定的表达式出现1次或0次 例如,"a?ve?"可以匹配"never"中的"ve" {n} 其限定的表达式出现次数确定n次(n≥0) {n,} 其限定的表达式至少出现n次 {n,m} 其限定的表达式出现的次数为≥n次,≤m次(m>n) 还有几个重要的符号: 符号含义 ^ (Shift+6)匹配输入的开始位置 非的意思。例如[^a-z],匹配非a-z的一个字符。 $ (Shift+4)匹配输入的结尾 \将下一个字符标记为特殊字符或字面值 例如:想匹配”.”时或其他特殊字符时,需写为的”\.” ()(小括号) 1.改变优先级 2.分组,提取信息 需要熟记一些简写: \d = [0-9]

表单验证和正则表达式

正则表达式和表单验证 主要内容 ?什么是表单的验证 ?表单的操作 ?表单的验证 ?正则表达式的定义 ?正则表达式验证 (一)什么是表单的验证 表单的验证 在JavaScript之前,所有的验证都是发生在服务器上,增加了反应 时间 使用JavaScript验证,则在数据提交到服务器端之前进行一系列的 判断,比如数据不全或无效则取消提交,同时再提示重新输入. 表单的验证一般有两种形式 一个是在button按钮的onclick事件上完成,如果返回false则取消 提交 在提交按钮的onsubmit事件完成,如果返回false,表单不提交 常见的验证 文本框是否为空? 选择型的表单是否选择? 用户输入的邮件地址是否合法? 用户是否已输入合法的日期? (二)表单的操作 引用表单域 根据表单的名字获取表单的引用 var myForm = doucument.forms[“name”];

根据表单数组获取 var myForm = document.forms[0]; 表单中的属性 表单中的方法 表单中的事件 表单域中的通用属性 disabled属性 name属性:name的属性值是可以通过JavaScript改变 form属性:通过form属性可以获得一个表单域所在的表单 表单域中的通用方法 ?focus()方法 ?blur()方法

表单域中的通用事件 onfocus和onblur事件 onclick、onkeydown、onkeyup和onkeypress事件 onmouseover、onmouseout、onmousedown、和onmouseup事件 onchange事件 使用文本域 获取和设置文本域的值 使用select方法选中文本 使用按钮类表单域 简单按钮:最常用的方法捕获onclick事件,然后执行代码 复选按纽:通过checked属性获取,选中时是true,否则为false. 单选按钮:通过checked属性获取,选中时是true,否则为false. 使用下拉列表框 获取和设置下拉列表框的值 下拉列表框的值表示被选中的option标记的value属性 获取选项的个数 select对象有一个length属性,表示选项的个数 获取当前选项的索引 select对象中使用selectedIndex属性获取当前选中的option对象的索引 获取所有选项的集合 用options属性表示所有option组成的集合,option的value代表其值,text属性 代表其中间的文本,selected属性决定该option是否被选中 为select动态添加选项 在所有的option后面添加一个新的选项 Select.options[select.length] = new Option(“optiontext”,”value”); 从select中删除一个选项 ?Select.options[1] = null; 清空一个select 替换一个选项 Select.options[0] = new Option(“optiontext”,”value”);

正则表达式常用发发总结

//判断输入内容是否为空 function IsNull(){ var str = document.getElementById('str').value.trim(); if(str.length==0){ alert('对不起,文本框不能为空或者为空格!'); //请将“文本框”改成你需要验证的属性名称! } } //判断日期类型是否为YYYY-MM-DD格式的类型 function IsDate(){ var str = document.getElementById('str').value.trim(); if(str.length!=0){ var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/; var r = str.match(reg); if(r==null) alert('对不起,您输入的日期格式不正确!'); //请将“日期”改成你需要验证的属性名称! } } //判断日期类型是否为YYYY-MM-DD hh:mm:ss格式的类型 function IsDateTime(){ var str = document.getElementById('str').value.trim();

if(str.length!=0){ var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}): (\d{1,2}):(\d{1,2})$/; var r = str.match(reg); if(r==null) alert('对不起,您输入的日期格式不正确!'); //请将“日期”改成你需要验证的属性名称! } } //判断日期类型是否为hh:mm:ss格式的类型 function IsTime() { var str = document.getElementById('str').value.trim(); if(str.length!=0){ reg=/^((20|21|22|23|[0-1]\d)\:[0-5][0-9])(\:[0-5][0-9])?$/ if(!reg.test(str)){ alert("对不起,您输入的日期格式不正确!"); //请将“日期”改成你需要验证的属性名称! } } } //判断输入的字符是否为英文字母

正则表达式

正则表达式 一、什么是这则表达式 正则表达式(regular expressions)是一种描述字符串集的方法,它是以字符串集中各字符串的共有特征为依据的。正则表达式可以用于搜索、编辑或者是操作文本和数据。它超出了java程序设计语言的标准语法,因此有必要去学习特定的语法来构建正则表达式。一般使用的java.util.regex API所支持的正则表达式语法。 二、测试用具 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex{ public static void main(String[]args)throws Exception{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); if(br==null){ System.out.println("没有输入任何数据"); System.exit(1); } while(true){ System.out.print("输入表达式:"); Pattern pattern=https://www.360docs.net/doc/4d10703287.html,pile(br.readLine()); System.out.print("输入字符串:"); Matcher matcher=pattern.matcher(br.readLine()); boolean found=false; while(matcher.find()){ System.out.println("找到子字符串"+matcher.group()+" 开始于索引"+matcher.start()+"结束于索引"+matcher.end()+"\n") found=true; } if(!found){ System.out.println("没有找到子字符串\n"); } } } }

常用正则表达式

1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2. "^\d+$"//非负整数(正整数+ 0) 3. "^[0-9]*[1-9][0-9]*$"//正整数 4. "^((-\d+)|(0+))$"//非正整数(负整数+ 0) 5. "^-[0-9]*[1-9][0-9]*$"//负整数 6. "^-?\d+$"//整数 7. "^\d+(\.\d+)?$"//非负浮点数(正浮点数+ 0) 8. "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"//正浮点数 9. "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"//非正浮点数(负浮点数+ 0) 10. "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"//负浮点数 11. "^(-?\d+)(\.\d+)?$"//浮点数 12. "^[A-Za-z]+$"//由26个英文字母组成的字符串 13. "^[A-Z]+$"//由26个英文字母的大写组成的字符串 14. "^[a-z]+$"//由26个英文字母的小写组成的字符串 15. "^[A-Za-z0-9]+$"//由数字和26个英文字母组成的字符串 16. "^\w+$"//由数字、26个英文字母或者下划线组成的字符串 17. "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"//email地址 18. "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"//url 19. /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日 20. /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年 21. "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil 22. /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码 23. "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}| 1dd|2[0-4]d|25[0-5])$" //IP地址 24. 25. 匹配中文字符的正则表达式:[\u4e00-\u9fa5] 26. 匹配双字节字符(包括汉字在内):[^\x00-\xff] 27. 匹配空行的正则表达式:\n[\s| ]*\r 28. 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 29. 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 30. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 31. 匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$ 32. 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 33. 匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})? 34. 匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$ 35. 36. 37. 元字符及其在正则表达式上下文中的行为:

JS正则表达式大全

JS正则表达式大全 JS正则表达式大全【1】 正则表达式中的特殊字符【留着以后查用】字符含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" $ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" * 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa + 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa ? 匹配前面元字符0次或1次,/ba*/将匹配b,ba (x) 匹配x保存x在名为$1...$9的变量中 x|y 匹配x或y {n} 精确匹配n次 {n,} 匹配n次以上 {n,m} 匹配n-m次 [xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) [^xyz] 不匹配这个集合中的任何一个字符 [\b] 匹配一个退格符 \b 匹配一个单词的边界 \B 匹配一个单词的非边界 \cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M \d 匹配一个字数字符,/\d/ = /[0-9]/ \D 匹配一个非字数字符,/\D/ = /[^0-9]/ \n 匹配一个换行符 \r 匹配一个回车符 \s 匹配一个空白字符,包括\n,\r,\f,\t,\v等 \S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/ \t 匹配一个制表符 \v 匹配一个重直制表符 \w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配

正则表达式写的form表单验证

希望能帮助更多的人,可以加我qq交流504781715 formzzbds.html