`
zhou_hong_liang
  • 浏览: 97354 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

工作中用到的正则表达式

阅读更多
一、简单的日期判断(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])002.最强验证日期的正则表达式,添加了闰年的验证

这个日期正则表达式支持
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)))
分享到:
评论

相关推荐

    表单验证(用到正则表达式)

    在这个JSP示例中,我们首先获取用户提交的邮箱地址,然后使用Pattern的compile()方法编译正则表达式,接着通过matcher()方法创建一个Matcher对象,最后使用matches()方法检查输入的邮箱是否与模式匹配。 除了基本的...

    js项目中用到的正则表达式统计

    该文件中统计的正则表达式包含以下内容(都是实际项目中使用的,经过测试): 1、大于等于0的值,允许输入两位小数(边界值:100.0,100.00等值都已包含在验证的里面); 2、大于3小于40的整数; 3、0到1之间的小数...

    VBScript 正则表达式详解

    VBScript 中的正则表达式详解是指使用 RegExp 对象来提供简单的正则表达式支持。该对象有三个属性和三个方法,分别是 Global 属性、IgnoreCase 属性、Pattern 属性、Execute 方法、Replace 方法和 Test 方法。 1. ...

    正则表达式测试文件

    量词是正则表达式中的一个重要概念,例如星号(*)、加号(+)和问号(?),它们可以与一个字符或一个字符组配合使用,控制匹配的次数。此外,还有精确匹配的量词,如花括号({n},{n,},{n,m})。 预定义字符集,...

    最小的C++正则表达式库

    这款小型库虽然体积小,但功能却不容小觑,它支持各种常见的正则表达式语法,如字符类、量词、分组、预查和后顾等,涵盖了大部分开发者在实际项目中可能用到的功能。 跨平台性是这个库的一大亮点。在开发过程中,...

    正则表达式(Word)

    字符转义是指在正则表达式中使用反斜杠(\)来转义特殊字符,以便于匹配特殊字符。例如,\* 转义为匹配零次或多次的任意字符。 6. 重复 重复是指在正则表达式中使用特殊的符号来指定匹配的次数。例如,* 代表零次...

    很强大美观的Regex正则表达式测试工具

    例如,邮箱地址验证通常会用到正则表达式,如`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`,这个模式能匹配大部分有效的电子邮件地址。 测试工具是提升正则表达式编写效率的关键,因为它可以实时显示匹配...

    正则表达式识别银行卡。

    各类银行卡识别所用到的正则表达式的json文件。 部分内容: "bankName": "中国邮政储蓄银行", "bankCode": "PSBC", "patterns": [{ "reg": "^(621096|621098|622150|622151|622181|622188|622199|955100|...

    经典正则表达式完美教程

    正则表达式中的量词用于指定字符或字符集出现的次数。例如: - `{n}` 表示匹配恰好n次。 - `{m,n}` 表示匹配至少m次,但不超过n次。 - `{n,}` 表示匹配至少n次,无上限。 举个例子,`/c{1}/` 只能匹配单个 'c',而...

    EL,正则表达式,java中常用的验证语言

    虽然EL本身并不直接涉及正则表达式,但在实际应用中,我们可能通过EL来调用Java方法,这些方法可能会用到正则表达式进行数据验证。 接着,正则表达式(Regular Expression)是一种模式匹配工具,可以用来检查一个...

    带有正则表达式校验的TextBox

    这就需要用到正则表达式,一种强大的文本模式匹配工具。在给定的“带有正则表达式校验的TextBox”中,开发者通过继承`TextBox`类并扩展其功能,实现了基于正则表达式的数据验证。 首先,`RegexTextBox.cs`文件很...

    Qt 正则表达式例程

    Qt正则表达式例程,包含字符串搜索、字符串替换等。配合博文http://blog.csdn.net/lankin2013/article/details/41989961 Qt的正则表示类是QRegExp,在很多情况下都可以用到,比如字符串验证、字符串搜索、搜索并替换...

    正则表达式测试工具(src)

    正则表达式是一种强大的文本处理工具,用于在字符串中匹配、查找、替换或者提取符合特定模式的文本。在VB6(Visual Basic 6)中,虽然内置的支持不如现代编程语言全面,但通过引入第三方库或者自定义实现,也能实现...

    Oracle正则表达式函数全面解析

    字符簇是POSIX正则表达式中一组预定义的字符集合,用于方便地表示常见的字符类型: - `[[:alpha:]]`:任何字母。 - `[[:digit:]]`:任何数字。 - `[[:alnum:]]`:任何字母或数字。 - `[[:space:]]`:任何空白字符。 ...

    Linux C Regex正则表达式 库

    在Linux环境中,C语言编程中处理字符串匹配和模式查找时,常常会用到正则表达式库。这里的"Linux C Regex正则表达式库"是一个专门为C语言开发的库,用于实现正则表达式的编译、匹配和操作功能。这个库经过修改后,也...

    正则表达式工具RegexTestTool

    在输入验证时,如邮箱或电话号码格式的检查,也会用到正则表达式;甚至在数据分析中,它也能帮助我们快速定位和处理特定格式的数据。 RegexTestTool这款工具提供了友好的用户界面,使得对正则表达式的操作更加直观...

    winform 使用正则表达式来验证字符串源码

    在Windows Forms(Winform)开发中,正则表达式是一种强大的工具,用于验证用户输入的数据是否符合特定格式或规则。正则表达式是通过模式匹配来实现数据验证的,可以检查字符串是否包含数字、字母、特殊字符等,并能...

    正则表达式_数字的提取

    正则表达式是一种强大的文本处理工具,它在IT行业中扮演着至关重要的角色,尤其是在字符串处理、数据提取、表单验证等方面。"数字的提取"是正则表达式应用的一个常见场景,例如从文本中准确地识别和提取出所有的数字...

    正则表达式写法与部分表达式

    以上列出的正则表达式涵盖了从简单的数字验证到复杂的电子邮件地址和URL格式的匹配,是实际开发中常用到的一些模式。通过这些示例,我们可以更深入地理解正则表达式的构造方法以及如何灵活运用它们解决实际问题。

Global site tag (gtag.js) - Google Analytics