编辑:感谢大家的投入。你回答的是对的。但我认为我没有说清楚。
我想在键入自己时检查输入值。如果用户输入的任何其他字符不在列表中,则应回滚输入的字符。
(一旦输入整个输入,我不关心检查。)
我想验证日期输入字段,该字段应仅包含字符0-9[digits], -(hyphen) , .(dot),
和/(forward slash)
。日期可能类似于22/02/1999
或22.02.1999
或22-02-1999
。无需验证要么在事件或位置上完成。简单验证足以检查它是否具有除上面列出的字符之外的任何其他字符。
[我不擅长正则表达。]
这是我认为应该工作但不是。
var reg = new RegExp('[0-9]./-');
答案 0 :(得分:6)
您的表达式仅测试字符串中的 where ,数字后跟任何字符(.
is a meta character)和/-
。例如,5x/-
或42%/-foobar
会匹配。
相反,您希望将所有字符放入character class并测试字符串中的每个字符是否都是其中之一:
var reg = /^[0-9.\/-]+$/
^
matches the start of the string [...]
匹配(即任何数字.
,/
或-
)。/
必须被转义,因为它也表示正则表达式文字的结尾
两个字符之间的-
描述了范围字符(在它们之间,例如0-9
或a-z
)。如果-
位于开头或结尾,则它没有特殊含义,并且字面上被解释为连字符。+
is a quantifier并且表示“如果前面的模式,则为一个或多个”。这允许我们(与锚一起)测试字符串的每个字符是否都在字符类中。$
匹配字符串的结尾或者,您可以检查是否有任何不允许的字符之一:
var reg = /[^0-9.\/-]/;
字符类开头的^
否定了它。这里我们不必测试字符串的每个字符,因为只有字符的存在才会使字符串无效。
您可以像这样使用它:
if (reg.test(str)) { // !reg.test(str) for the first expression
// str contains an invalid character
}
答案 1 :(得分:3)
试试这个:
([0-9]{2}[/\-.]){2}[0-9]{4}
答案 2 :(得分:2)
如果您不关心日期的有效性,可以轻松使用正则表达式:
^[0-9]{1,2}[./-][0-9]{1,2}[./-][0-9]{4}$
字符类[./-]
允许方括号内的任何一个字符和量词允许1或2位数月份和日期,而只有4位数年。
你也可以将前几组分组如下:
^([0-9]{1,2}[./-]){2}[0-9]{4}$
使用第一个正则表达式更新了fiddle。