在下面的代码中,我想用第一个validationPattern验证messageText并显示validationPatterns数组中的相应消息。模式和消息由管道“|”分隔字符。
为此我使用下面的代码并且总是得到错误的结果。有人可以看看这个并帮助我吗?
var messageText = "Message1234";
var validationPatterns = [
['\/^.{6,7}$/|message one'],
['\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b|message two']
];
for (var i = 0; i < validationPatterns.length; i++) {
var validationvalues = validationPatterns[i].toString();
var expr = validationvalues.split("|")[0];
console.log(expr.constructor);
if(expr.test(messageText)) {
console.log("yes");
} else {
console.log("no");
}
}
我知道我们不能将管道用作分隔符,因为管道也是正则表达式的一部分。但是我稍后会改变它。
答案 0 :(得分:2)
您的验证模式是字符串。这意味着:
"\b"
相当于"b"
。您需要对它们进行双重转义:"\\b"
test
方法。您需要构建RegExp
objects。虽然可以解决这个问题,但如果你只使用正则表达式文字并将它们作为对象(或数组)的不同属性从消息中分离出来会更好。
var inputText = "Message1234";
var validationPatterns = [
[/^.{6,7}$/, 'message one'],
[/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/, 'message two']
];
for (var i = 0; i < validationPatterns.length; i++) {
var expr = validationPatterns[i][0],
message = validationPatterns[i][1];
console.log(expr.constructor); // RegExp now, not String
if(expr.test(inputText)) {
console.log(message+": yes");
} else {
console.log(message+": no");
}
}
答案 1 :(得分:1)
您的expr
变量仍然只是一个字符串(validationvalues.split("|")[0]
将返回一个字符串)。这就是它不能作为正则表达式的原因。
您需要在expr
的初始定义后添加一行。
expr = new RegExp(expr, 'i');
'i'只是一个如何使用不区分大小写的标志或其他标志的示例。如果需要区分大小写的搜索(默认值),请使用空字符串。
此外,您需要取出围绕第一个模式的/
和/
。只有在JavaScript代码中使用正则表达式文字时才需要它们,并且在将字符串转换为正则表达式时不需要它们。