在下面的代码中,我想用第一个 validationPattern 验证 messageText 并显示来自 validationPatterns 数组的相应消息。 Pattern 和 Message 由管道“|”分隔性格。
为此,我使用下面的代码,但总是得到错误的结果。有人可以看看这个并帮助我吗?
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");
}
}
我知道我们不能使用管道作为分隔符,因为管道也是正则表达式的一部分。不过我稍后会更改它。
最佳答案
您的验证模式是字符串。这意味着:
- 反斜杠被吃掉了,因为它们只是对后面的字符进行字符串转义。
"\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");
}
}
关于javascript - 正则表达式 javascript 返回意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16797469/