提问者:小点点

为什么表单输入的正则表达式不正确。 JavaScript


在我的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


共1个答案

匿名用户

由于字符串转义:
“\\\”变成字符串\\,然后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>