JavaScript使用正则表达式进行验证

时间:2012-11-27 01:52:23

标签: javascript regex

我正在验证表格,表格中的文字必须是CIT,BIS或MATH

if(dept == ""){
     msg += "You must enter a department\n";
}else if((dept != "CIT") && (dept != "BIS") && (dept != "MATH")){
     msg += '"' + dept + '"' + " is not one of CIT, BIS, or MATH.\n";
}

我需要添加某种形式的正则表达式,以确保输入时的文本CIT,BIS或MATH可以以任何形式放入大写和小写。

任何帮助都会很棒 感谢

3 个答案:

答案 0 :(得分:3)

不需要正则表达式。

在验证之前,只需将输入转换为小写。

if (dept == "") {
    msg += "You must enter a department\n";
}
else if (isInvalid(dept)) {
    msg += '"' + dept + '"' + " is not one of CIT, BIS, or MATH.\n";
}

function isInvalid(u) {
  var s = u.toLowerCase();
  var validStrings = [ "cit", "bis", "math" ];
  for (var i = 0; i < validStrings.length; i++) {
      if (s === validStrings[i]) {
          return false;
      }
  }
  return true;
}

正如@y_nk指出的那样,以下方法会更有效(如有必要):

function isValid(s) {
    var validationObject = { "cit" : true, "bis": true, "math": true };
    return validationObject[ s.toLowerCase() ] === true;
}

答案 1 :(得分:1)

如果你真的认为正则表达式是这样的:

if (!/^(?:BIS|CIT|MATH)$/i.test(dept)) {
}

必须锚定表达式,这就是为什么你也会看到非捕获组的原因。

更好的方法是:

if (['cit', 'bis', 'math'].indexOf(dept.toLowerCase()) == -1) {
}

不幸的是,由于Array.indexOf()

,这仅适用于IE9

答案 2 :(得分:0)

像这样的东西

var regex = new RegExp("^CIT$|^BIS$|^MATH$", "i");

if(dept == ""){
     msg += "You must enter a department\n";
}else if(!regex.test(dept)){
     msg += '"' + dept + '"' + " is not one of CIT, BIS, or MATH.\n";
}