在我的contactform中,我添加了在输入字段中查找url字符串的事件侦听器。 我使用正则表达式(http:https:www\/\/\\\\)+
来完成这项工作。 regex中的所有字符串都正常工作,除了\\\\
会给出1个反斜杠。
为什么https://regexr.com上的正则表达式正常,为什么它在JavaScript中不能工作?
jsFiddle https://jsFiddle.net/j3hsvapm/1/
我做错了什么?
null
var formElms = document.querySelectorAll('.testme');
Object.keys(formElms).forEach(function(key) {
formElms[key].addEventListener('input', function () {
var result = 'OK';
var reg = new RegExp("(http:|https:|www|\/\/|\\\\)+", "gi");
value = formElms[key].value;
// console.log(key, ': ', value);
if (reg.test(value)) result = 'Not allowed';
document.querySelector('#result').innerHTML = result;
});
});
div, input, textarea {
width: 200px;
font: 400 16px/1.5 sans-serif;
}
<div id="result">OK</div>
<br><input class="testme" type="text">
<br><br><textarea class="testme" rows="4"></textarea>
null
由于字符串转义:“\\\”
变成字符串\\
,然后regex再次转义,因此它变成\
改用regex文字语法:
null
var formElms = document.querySelectorAll('.testme');
Object.keys(formElms).forEach(function(key) {
// console.log(key, formElms[key], formElms[key].value);
formElms[key].addEventListener('input', function () {
var result = 'OK';
var reg = /(http:|https:|www|\/\/|\\\\)+/gi;
value = formElms[key].value;
console.log(key, ': ', value);
if (reg.test(value)) result = 'Not allowed';
document.querySelector('#result').innerHTML = result;
});
});
div, input, textarea {
width: 200px;
font: 400 16px/1.5 sans-serif;
}
<div id="result">OK</div>
<br><input class="testme" type="text">
<br><br><textarea class="testme" rows="4"></textarea>