从日期字符串中提取日期(1或2位数)、月(1或2位数)和年(2或4位数)(用于不同的模式)
Extract date(1 or 2 digit), month(1 or 2 digit) and year(2 or 4 digit) from a date string (for different pattern)
我的应用程序有一个文本字段,用户可以手动输入日期。此外,我的应用程序有偏好选择日期模式,如年月日或年月日或年月日
1)假设应用程序当前使用的是M D Y模式。因此,用户可以输入以下格式的日期:09/14/2015或9/14/2015或09/14/15或9-14-2015或9-14/2015
这里我想提取…
month => 09 (or 9)
day => 14
year => 2015 (or 15)
注意:由于应用程序使用的是Y模式,如果用户以Y模式输入日期(如14/09/2015)或Y模式(如2015/09/14),我们不应该匹配它。
我有下面的regex
var dateString = "09/14/2015";
var match = dateString.match(/('d{1,2})['/ '.-]('d{1,2})['/ '.-]('d{2,4}).*/);
但是它不符合我的期望,因为它也允许D M Y和Y M Y模式。
2)以同样的方式,如果应用程序使用D M Y模式,我想提取日,月和年。(它不应该允许M D Y或Y M D)
3)同样,如果应用程序使用Y M D模式,我想提取年,月和日。(它不应该允许M D Y或D M Y)
有人能帮我修一下吗?谢谢你!
Try This
^((0?[13578]|10|12)(-|'/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|'/)((19)([2-9])('d{1})|(20)([01])('d{1})|([8901])('d{1}))|(0?[2469]|11)(-|'/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|'/)((19)([2-9])('d{1})|(20)([01])('d{1})|([8901])('d{1})))$
不幸的是,仅通过使用正则表达式无法为您的问题提供完整的答案。它们是用来识别模式的。在一些情况下,仅仅通过识别模式就可以判断该模式是否表示有效数据。但这并不总是正确的,你的问题就是一个例子。
想一想:"15-02-29"是有效的吗?答案是:视情况而定!这个字符串可以表示:
- 2029年2月15日生效;
- ? ?/2/2029 -无效;
- 2015/feb/29 -无效,因为2015不是闰年;
- …
所以这远远超出了正则表达式的本意。它们只是愚蠢的字符串识别器。解决方案?您甚至可以使用正则表达式从传递的字符串中提取值,但是您必须编写一些额外的代码来验证这些值的含义。
日期06/05/2015可以表示"2015年6月5日"或"2015年5月6日",无论哪种方式,日期都是有效的,并且应该对MDY和DMY都有效,因此它们不能相互排斥。一旦用户选择了一种格式,你就必须相信他们会正确使用。(在某些情况下)
看一下javascript库moment.js您可以使用它来按期望格式解析字符串日期。
moment("9/14/2015", ["MM-DD-YYYY", "YYYY MM DD", "DD-MM-YYYY"]);
我设置了一个小操场:http://jsfiddle.net/me2loveit2/knfjepty/
- 将函数的上下文应用于javascript变量
- keyup事件处理程序更改焦点不适用于快速键入
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- PHP中的setcookie仅适用于localhost
- 包括用于facebook评论框的JavaScript SDK
- 如何检测用于WebGL的专用或集成显卡
- ng更改事件不适用于Dropdown
- 用于搜索的聚合物嵌套绑定
- jQuery表单添加不适用于下拉列表
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- JS编译器/包管理器,用于版本控制
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 将CSS应用于printWindow.print();在Javascript中
- 两位数的月份日期验证
- 用于'魔术串'属性
- 用于检查数组中是否存在元素的javascript自定义方法
- 正则表达式用于固定位数
- 从日期字符串中提取日期(1或2位数)、月(1或2位数)和年(2或4位数)(用于不同的模式)
- 在$filter应用于3位数的负数之后,小于比较不起作用