2016-10-04 3 views
1

Мне нужно указать текстовое поле, содержащее URL-адрес, начинающийся с http://, но не с https://. Я думал, что это должно работать, но я получаю предупреждение, даже если все URL-адреса равны https.Regex для http: // но не https: //

$('#template_form').submit(function() { 
    alert("this is the text: " + $("#template_data").val()); 
    val = $("#template_data").val(); 
    if (val.search(/^http:\/\//)){ 
     alert("there's a URL in there..."); 
     return false; 
    } 
    return true; 
}); 

<textarea id="template_data">This is a test of the new URL validation. Let's add a link to https://www.test.com</textarea> 

Этот должен представить только второе предупреждение, если URL были http://www.test.com, но бросает его даже как есть, с https://. Что я делаю не так?

+0

Почему вы не можете просто попробовать с \ http: \ g? –

+2

'search' возвращает -1 для отсутствия соответствия, которое вычисляется как true. – Tibrogargan

+0

Если вы хотите использовать boolean, используйте 'regexp.test (string)'. –

ответ

1

Из документации search():

Метод String, который проверяет соответствие в строке. Он возвращает индекс совпадения или -1, если поиск не выполняется.

-1 сделает, если заявление оценить истинные (if (-1) {alert("true");}. Так или перейти на match() или test(), или проверить if (val.search(...) > -1)

Также ^ неправильно в своем регулярном выражении, это будет соответствовать только с самого начала строки.

$('#template_form').submit(function() { 
 
    alert("this is the text: " + $("#template_data").val()); 
 
    val = $("#template_data").val(); 
 
    if (val.match(/http:\/\//)) { 
 
    alert("there's a URL in there..."); 
 
    return false; 
 
    } 
 
    return true; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="template_form"> 
 
    <textarea id="template_data">This is a test of the new URL validation. Let's add a link to https://www.test.com</textarea> 
 
    <input type="submit" value="submit"> 
 
</form>

0

String.search() не булево:

Возвращаемое значение
Индекс первого матча между регулярным выражением и заданной строки; если не найдено, -1.

Далее в той же части документации:

Если вы хотите знать, находится ли шаблон, а также его индекс в строка использовать search() (, если вы хотите знать, что существует используйте подобный test() метод, который возвращает булево)

0
$('#template_form').submit(function() { 
    if ($("#template_data").val().indexOf("http:\/\/") > -1) { 
    return false; 
    } 
    return true; 
}); 

Вот еще один способ.

Смежные вопросы