编辑:感谢大家的投入。你回答的都是对的。但我想我解释得不够清楚。
我想在自己输入时检查输入值。如果用户正在输入不在列表中的任何其他字符,则应回滚输入的字符。
(我不关心在输入整个输入后进行检查)。
我想验证一个日期输入字段,它应该只包含字符 0-9[digits], -(hyphen) , .(dot),
和 /(forward slash)
.Date 可能类似于 22/02/1999
或 22.02.1999
或 22-02-1999
。无需对任何一个进行验证发生或位置。一个简单的验证就足以检查它是否具有上面列出的字符以外的任何其他字符。
[我不擅长正则表达式。]
这是我认为应该有效但无效的方法。
var reg = new RegExp('[0-9]./-');
这里是 jsfiddle.
最佳答案
您的表达式仅测试字符串中的任何位置,一个数字后跟任何字符(.
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并且意味着“如果前面的模式是一个或多个”。这允许我们(与 anchor 一起)测试字符串的每个字符是否都在字符类中。 $
匹配字符串结尾
或者,您可以检查是否有任何字符不是允许的字符之一:
var reg = /[^0-9.\/-]/;
字符类开头的 ^
否定它。这里我们不必测试字符串的每个字符,因为唯一字符的存在不同已经使字符串无效。
你可以这样使用它:
if (reg.test(str)) { // !reg.test(str) for the first expression
// str contains an invalid character
}
关于javascript - 要检查的正则表达式仅包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18358480/