Javascript 要检查的正则表达式仅包含

Javascript 要检查的正则表达式仅包含,javascript,jquery,regex,Javascript,Jquery,Regex,编辑:谢谢大家的意见。你的回答都是对的,但我觉得我解释得不够清楚 我想在键入内容时检查输入值。如果用户输入的是列表中没有的任何其他字符,则应回滚输入的字符 (我不打算在输入整个输入后进行检查) 我想验证一个日期输入字段,该字段应该只包含字符0-9[数字]、-(连字符)、(点)、和/(正斜杠)。日期可能类似于22/02/1999或22.02.1999或22-02-1999。不需要对事件或位置进行验证。普通验证足以检查它是否具有除上述字符以外的任何其他字符。 [我不擅长正则表达式。] 这是我认为应

编辑:谢谢大家的意见。你的回答都是对的,但我觉得我解释得不够清楚

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

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

我想验证一个日期输入字段,该字段应该只包含字符
0-9[数字]、-(连字符)、(点)、
/(正斜杠)
。日期可能类似于
22/02/1999
22.02.1999
22-02-1999
。不需要对事件或位置进行验证。普通验证足以检查它是否具有除上述字符以外的任何其他字符。 [我不擅长正则表达式。]

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

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

下面是

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

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

var reg = /^[0-9.\/-]+$/
  • […]
    匹配组中是否包含字符(即任何数字、
    /
    -
    )。
    /
    必须转义,因为它还表示正则表达式文字的结尾。
    两个字符之间的
    -
    描述了一系列字符(如
    0-9
    a-z
    )。如果
    -
    位于开头或结尾,则它没有特殊含义,按字面理解为连字符
  • 并表示“一个或多个,如果前面的模式”。这允许我们(连同锚)测试字符串的每个字符是否都在字符类中
  • $
    匹配字符串的结尾
或者,您可以检查是否有任何字符不是允许的字符之一:

var reg = /[^0-9.\/-]/;
字符类开头的
^
将对其进行否定。在这里,我们不必测试字符串的每个字符,因为只有一个字符的存在是不同的,这已经使字符串无效

您可以这样使用它:

if (reg.test(str)) { // !reg.test(str) for the first expression
    // str contains an invalid character
}

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

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

var reg = /^[0-9.\/-]+$/
  • […]
    匹配组中是否包含字符(即任何数字、
    /
    -
    )。
    /
    必须转义,因为它还表示正则表达式文字的结尾。
    两个字符之间的
    -
    描述了一系列字符(如
    0-9
    a-z
    )。如果
    -
    位于开头或结尾,则它没有特殊含义,按字面理解为连字符
  • 并表示“一个或多个,如果前面的模式”。这允许我们(连同锚)测试字符串的每个字符是否都在字符类中
  • $
    匹配字符串的结尾
或者,您可以检查是否有任何字符不是允许的字符之一:

var reg = /[^0-9.\/-]/;
字符类开头的
^
将对其进行否定。在这里,我们不必测试字符串的每个字符,因为只有一个字符的存在是不同的,这已经使字符串无效

您可以这样使用它:

if (reg.test(str)) { // !reg.test(str) for the first expression
    // str contains an invalid character
}

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

^[0-9]{1,2}[./-][0-9]{1,2}[./-][0-9]{4}$
字符类
[./-]
允许方括号内的任何一个字符,量词允许1位或2位月份和日期,而仅允许4位年份

您还可以按如下方式对前几个组进行分组:

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

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

^[0-9]{1,2}[./-][0-9]{1,2}[./-][0-9]{4}$
字符类
[./-]
允许方括号内的任何一个字符,量词允许1位或2位月份和日期,而仅允许4位年份

您还可以按如下方式对前几个组进行分组:

^([0-9]{1,2}[./-]){2}[0-9]{4}$
使用第一个正则表达式更新了您的。请尝试以下操作:

([0-9]{2}[/\-.]){2}[0-9]{4}
试试这个:

([0-9]{2}[/\-.]){2}[0-9]{4}

不要忘记
^$
锚定,如果在类的开头或结尾,则无需转义破折号。此外,您可以使用
\d
而不是
[0-9]
和非捕获组。所有这些加在一起:
^(?:\d{2}[./-]){2}\d{4}$
不要忘记
^$
锚点,如果类位于开头或结尾,则无需在类中转义破折号。此外,您可以使用
\d
而不是
[0-9]
和非捕获组。所有这些加在一起:
^(?:\d{2}[./-]){2}\d{4}$
在第二个要点中,您可能需要提到
-
必须位于字符集的末尾(或开头),否则应该转义,因为它在第二个要点中的字符之间具有特殊含义,您可能希望提到
-
必须位于字符集的末尾(或开头),否则它应该转义,因为它在字符之间有特殊的含义编辑后:可能重复,但post答案只检查字符,而不检查类似的符号。/-也是……是的,嗯,这取决于你想出正确的表达方式。您现在的问题似乎有两个问题:(1)如何测试字符串是否包含某些字符;(2)如何防止字符输入。对于表达式,您将找到答案