2013-08-21 176 views
1

编辑:谢谢大家的投入。你回答什么都对,但我想我没有解释清楚。正则表达式只包含

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

(我不关心在输入完整输入后检查)。

      我想验证这应该只包含字符0-9[digits], -(hyphen) , .(dot),/(forward slash) .Date可能会像22/02/199922.02.199922-02-1999。没有验证需要对任何发生或位置做了日期输入字段。一个简单的验证就足以检查它是否有任何其他字符比上面列出的字符。 [我不擅长正则表达式。]

这是我认为应该工作,但不是。

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

这里是jsfiddle.

+0

您的编辑后:可能重复[是否有可能进入到文本框或使用jQuery的任何输入栏阻止字符的某个字符或一组?(HTTP:/ /stackoverflow.com/questions/2500620/is-it-possible-to-block-a-certain-character-or-group-of-characters-from-entering) –

+0

但该帖子的答案确实只检查字符,但不是像./-太... –

+1

是的,好吧,这是由你来提出正确的表达。你现在似乎在问你两个问题:(1)如何测试一个字符串是否包含某些字符,以及(2)如何防止字符输入。对于表达式,你会在下面找到答案。其他问题链接到问题的副本。 –

回答

6

你只表达测试是否任何地方字符串中,数字后面是任何字符(. is a meta character)和/-。例如,5x/-42%/-foobar将匹配。

相反,你要把所有的字符集character class和测试字符串中的每一个字符是否是其中之一:

var reg = /^[0-9.\/-]+$/ 
  • ^ matches the start of the string
  • [...]比赛如果字符包含在组中(即任何数字,./-)。
    /来转义,因为它也表示字面一个正则表达式的结尾。
    -在两个字符之间描述了范围的字符(在它们之间,例如0-9a-z)。如果-在开头或结尾,它虽然没有特别的意义,并且字面上理解为连字符。
  • + is a quantifier和表示“一个或更多,如果前面的模式”。这允许我们(连同锚点一起)测试字符串的每个字符是否在字符类中。
  • $字符串的结尾匹配

或者,您可以检查是否存在是允许者之一任何字符:

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

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

您可以使用它像这样:

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

在你的第二个要点中,你可能想提到'-'需要在字符集的末尾(或开头),否则它应该被转义,因为它在字符之间有特殊的含义 – Ian

2

如果你不关心日期的有效性,你可以方便地使用正则表达式:

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

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

您也可以组中的第几组,像这样:

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

更新您的fiddle与第一正则表达式。

3

试试这个:

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

不要忘记' $'锚,并且如果它在开始或结束时不需要在班级中破折号。而且,你可以使用'\ d'而不是'[0-9]'和非捕获组。所有这些一起:'^(?:\ d {2} [./-]){2} \ d {4} $' – sp00m