1

编辑:谢谢大家的投入。你回答的都是对的。但我认为我解释得不够清楚。

我想在键入时检查输入值。如果用户正在输入不在列表中的任何其他字符,则应回滚输入的字符。

(我不打算在输入整个输入后进行检查)。

    我想验证一个应仅包含字符的日期输入字段,0-9[digits], -(hyphen) , .(dot),并且/(forward slash).Date 可能类似于22/02/1999or22.02.199922-02-1999。无需对出现或位置进行验证。一个简单的验证足以检查它是否有任何其他字符而不是上面列出的字符。[我不擅长正则表达式。]

这是我认为应该有效但不可行的方法。

  var reg = new RegExp('[0-9]./-');

这是jsfiddle。

4

3 回答 3

6

您的表达式仅测试字符串中的任何位置是否有数字后跟任何字符(.是元字符)和/-. 例如,5x/-42%/-foobar将匹配。

相反,您希望将所有字符放入字符类并测试字符串中的每个字符是否都是其中之一:

var reg = /^[0-9.\/-]+$/
  • ^匹配字符串的开头
  • [...]如果字符包含在组中(即任何数字./-),则匹配。必须转义,因为它也表示正则表达式文字的结尾
    。两个字符之间描述了一系列字符(在它们之间,例如或)。如果在开头或结尾,则它没有特殊含义,并且按字面意思解释为连字符。/
    -0-9a-z-
  • +是一个量词,意思是“一个或多个如果前面的模式”。这允许我们(与锚点一起)测试字符串的每个字符是否都在字符类中。
  • $匹配字符串的结尾

或者,您可以检查是否有任何字符不是允许的字符之一:

var reg = /[^0-9.\/-]/;

^字符类开头的 否定它。这里我们不必测试字符串的每个字符,因为只有字符不同的存在已经使字符串无效。

你可以像这样使用它:

if (reg.test(str)) { // !reg.test(str) for the first expression
    // str contains an invalid character
}
于 2013-08-21T13:19:34.930 回答
3

试试这个:

([0-9]{2}[/\-.]){2}[0-9]{4}
于 2013-08-21T13:20:27.607 回答
2

如果您不关心日期的有效性,您可以轻松使用正则表达式:

^[0-9]{1,2}[./-][0-9]{1,2}[./-][0-9]{4}$

字符类[./-]允许方括号内的任何一个字符,量词允许 1 或 2 位数的月份和日期,而只有 4 位数的年份。

您还可以像这样对前几组进行分组:

^([0-9]{1,2}[./-]){2}[0-9]{4}$

用第一个正则表达式更新了你的小提琴。

于 2013-08-21T13:20:05.167 回答