使用正则表达式验证表单(Javascript Regex)

时间:2013-11-18 22:06:07

标签: javascript regex

我有一个需要实时验证的输入表单(.Keyup和.Load)

它应该允许所有A-z字符(大写和小写)和符号“'”,“ - ”和“”(撇号,短划线和空白)。

目前这就是我所拥有的:([A-Za-z] - \ s \')* 我正在使用它:

var regex = /([A-Za-z]\-\s\')*/;
if (string == "") {
  turn textbox border grey (default)
} else if (!regex.test(string)) {
  turn textbox border red
} else {
  turn textbox border green
}

所有这一切都会每次都改变文本框绿色(除非它是空白的 - 它变成灰色)。 什么是正确的表达/技巧,我做错了什么?

1 个答案:

答案 0 :(得分:3)

您需要以下内容:

var regex = /^[A-Za-z\-\s']*$/;

^$分别是字符串锚点的开头和结尾。没有这些,匹配可以在字符串中的任何地方开始或结束。由于*表示“重复前一个元素零次或多次”,因此无论内容如何都匹配每个字符串,因为正则表达式可以成功匹配零个字符。

当前正则表达式的另一个问题是[A-Za-z]\-\s\'将尝试按顺序匹配字母,短划线,单个空格字符和撇号(总共4个字符)。要匹配这些选项中的任何一个,您需要将它们全部放在字符类(方括号)中,或者使用管道符(|)的替换,它看起来像([A-Za-z]|-|\s|')。交替是更一般的,但字符类是这样的首选方法。

关于转义,撇号在正则表达式中没有特殊含义,因此不需要转义。如果破折号位于字符类中,则只需要对其进行转义(如果它未被转义,则将其解释为范围的一部分)。