我需要检测输入中的值是否包含字母' sn'后跟一个连字符(不是立即,输入将是sn12345 - 更多文本),如果是,则运行一个正常的函数,除非用户输入诸如" isn'#34;之类的单词。或者"不是"。
有没有办法可以检测到之前是否有任何字母" sn"以及是否运行该功能。我确实考虑过检查撇号,但有些用户在输入有问题的输入时非常懒惰而且不使用它们。
var lowercase_name = subject.toLowerCase();
var has_sn = lowercase_name.indexOf("sn") > -1;
if(has_sn === true){
var has_hyphen = lowercase_name.indexOf("-") > -1;
if(has_hyphen === false){
//alert user missing hyphen
};
return false;
}
}
我还考虑检查" sn"前面有一个空格,但是如果它在输入的开头使用(在这种情况下很可能会在这个实例中使用),那将会失败。
答案 0 :(得分:1)
既然你说sn和你的破折号之间可能有空格,你想要不匹配sn前面跟其他字母的情况,你可以使用正则表达式:
var lowercase_name = subject.toLowerCase();
var has_sn = lowercase_name.indexOf("sn") > -1;
if(has_sn === true){
var snIsNotPrecededByLetters = lowercase_name.match(/\bsn/g);
var has_hyphen = lowercase_name.indexOf("-") > -1;
if(has_hyphen === false){
//alert user missing hyphen
};
return false;
}
}
" \ b"在正则表达式字符串使它只匹配" sn"如果之前没有字母。