2016-04-27 38 views
2

我是一个非常初学者的正则表达式。 我需要在JavaScript中以dd/mm/yy格式输入日期;我有这样的正则表达式的表达,将日期:Javascript正则表达式日期格式dd/mm/yy

var myDate = new Date().toLocaleDateString().replace(/\b(\d\/)/g, '0$1');

我需要改变上述正则表达式表达有一年两个数字而已,像:27/04/16

+4

添加'.replace(/ \ d {2}(\ d {2})/,“$ 1”)'替换。 –

+0

感谢WiktorStribiżew,但与您建议的正则表达式的月份在一个数字:27/4/16 – Newton

+0

是吗?替换(/ \ d {2}(\ d {2})/,/ var myDate = new Date()。toLocaleDateString “$ 1”);'? –

回答

0

第二更换会做的伎俩:

var myDate = new Date() 
    .toLocaleDateString() 
    .replace(/(\d+)/g, "0$1") 
    .replace(/\d+(\d{2})/g,"$1"); 

我因为刚刚抢夺的数字去掉从第一更换\b就够了。这个替换只是将所有数字都填入前导0.第二个替换将把每个数字修剪为只有2个最不重要的数字。

+0

是的。我想知道你能否证明这一点。但是,这不是最佳模式。 –

+0

我发现我的答案与您的答案几乎相同,但我选择了“+”而不是特定的“{2}”。 “证明它”是什么意思?第一个替换将所有数字都加上0,第二次替换将它们全部减少到最低有效2位数。您还需要将全局开关添加到上面的注释中。 – Phunt

+0

全局切换是redudant:日期字符串中有多少年? '\ d +'匹配所有可能的数字并开始*回溯* - 效率低下。但这里并不重要,因为输入字符串非常小。我的妻子终于完成了电子购物,但答案已被接受。当我们处理正则表达式并获得upvotes时,仅有代码的答案是没有用的,你最好解释你的模式在做什么。 –

0

尝试

function addPadding(digit) 
{ 
    return (digit < 10) ? '0' + String(digit) : digit; 
} 
var date = new Date(); 
dateString = addPadding(date.getDate()) + "/" + addPadding((date.getMonth() + 1)) + "/" +date.getFullYear().toString().substr(2,2); 
console.log(dateString); 
+0

getDate()和getMonth()将返回单个数字,并且对于值<10,不带前导零。 – Pappa

+0

我已编辑我的答案 –

0

上毗湿奴拉维的后小幅回调:

var date = new Date(); 
var day = date.getDate() < 10 ? "0" + (date.getDate()) : date.getDate(); 
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1); 
var year = date.getFullYear().toString().substr(2,2); 
var dateString = day + "/" + month + "/" + year; 
console.log(dateString);