0

我正在验证表格,表格中的文本必须是 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 可以以任何形式大写和小写。

任何帮助都会很棒谢谢

4

3 回答 3

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;
}
于 2012-11-27T01:54:38.807 回答
1

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

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

必须锚定表达式,这就是为什么您还会在其中看到非捕获组的原因。

一个更好的方法是:

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

不幸的是,这只适用于从 IE9 开始,因为Array.indexOf()

于 2012-11-27T01:59:04.903 回答
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";
}
于 2012-11-27T01:58:39.720 回答