日期验证的正则表达式 - 解释

时间:2011-03-29 14:57:33

标签: javascript regex

我在网上冲浪进行日期验证,但并不完全了解正则表达式。有人能解释一下吗?我对?{}$感到困惑。我们为什么需要它们?

dateReg = /^[0,1]?\d{1}\/(([0-2]?\d{1})|([3][0,1]{1}))\/(([1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))$/;

6 个答案:

答案 0 :(得分:3)

?表示“零或一次出现” {x}(其中x是数字)表示“完全x出现” $表示“行尾”

这些是非常基本的正则表达式,我建议您阅读some documentation

答案 1 :(得分:2)

在Javascript中,您可以通过将日期传递给Date.Parse()函数来验证日期。成功转换为日期对象意味着您有一个有效的日期。

不建议使用正则表达式。太多边缘情况和代码难以维护。

答案 2 :(得分:2)

^ = beginning of the string
[0,1]? = optional zero, one or comma (the comma is probably an error)
\d{1} = exactly one digit (the {1} is redundant)
\/ = a forward slash
[0-2]? = optional zero, one or two (range character class) followed by any single digit (\d{1})
OR [3] = three (character class redundant here) followed by exactly one zero, one or comma 
\/ = forward slash
[1]{1}[9]{1}[9]{1}\d{1} = 199 followed by any digit
OR 2-9 followed by any 3 digits

总的来说,这是一个写得很差的表达方式。我建议找一个更好的,或使用真正的日期解析器。

答案 3 :(得分:1)

?表示“零或上述之一”

{n}表示“前面提到的n”

$是String的结尾(Thanks @Andy E)

答案 4 :(得分:1)

总结一下:

`?”将匹配您放在它前面的模式组的0或1倍。在这种情况下,它可能被滥用,应该被排除在外,但这一切都取决于你想要匹配的内容。

`{x}'告诉正则表达式将前面的模式组恰好匹配x次。

`$'表示匹配行尾。

答案 5 :(得分:1)

好:

^ // start of the text
$ // end of the text
X{n} // number n inside these curly parenthesis define how many exact occurrences of X
X{m,n} // between m to n occurrences of X
X? // 0 or 1 occurrence of X
\d // any digits 0-9

有关Javascript日期验证的更多帮助,请参阅:Regular Expression to only grab date