2013-10-01 2 views
0

Я уже проверил предыдущие ответы на SO. Я знаю, что они классные.Validate URL, указанный пользователем

Это мой шанс: Я принимаю значения текстового поля и передаю его функции для проверки. Он правильно передает URL-адрес, но не выполняет проверки. Может кто-нибудь проверить, где ошибка? Я не мог определить

<html> 
    <head> 
     <title>ThenWat</title> 
    <script>@Vicky: above regex does not filter: 

    function validateURL($URL) { 
     alert($URL); 
     $pattern_1 = "/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i"; 
     $pattern_2 = "/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i";  

     if(preg_match($pattern_1, $URL) || preg_match($pattern_2, $URL)){ 
     alert("correct"); 
     return true; 
     } else{ 
     alert("Incorrect"); 
     return false; 
     } 
    } 

    </script> 
     </head> 
    <body style="height: 560px"> 
     <form> 

      <label>Enter URL: <input type="text" value="http://www.paulgraham.com/herd.html" name="sent" id="t1" style="width: 400px; height:40px;" ></label><br/> 

      <div style="z-index: 1; left: 420px; top: 160px; position: absolute; margin-top: 0px"> <button onclick="validateURL(document.getElementById('t1').value)";> Fire me </button>  
      </div> 
     </form> 


    </body> 
</html> 

UPDATE

<html> 
     <head> 
      <title>ThenWat</title> 
     <script>@Vicky: above regex does not filter: 

     function validateURL($URL) { 

var str=$URL;; 
var n=str.match(/((https?\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/g); 
document.getElementById("demo").innerHTML=n; 

//alert("correct or incorrect as per validation");  how to do this? 
     } 

     </script> 
      </head> 
     <body style="height: 560px"> 
      <form> 

       <label>Enter URL: <input type="text" value="http://www.paulgraham.com/herd.html" name="sent" id="t1" style="width: 400px; height:40px;" ></label><br/> 

       <div style="z-index: 1; left: 420px; top: 160px; position: absolute; margin-top: 0px"> <button onclick="validateURL(document.getElementById('t1').value)";> Fire me </button>  
       </div> 
      </form> 


     </body> 
    </html> 
+0

Там нет 'preg_match' функция JavaScript, если вам определите его где-то еще. –

+0

Вместо этого вы должны использовать 'onsubmit' на'

''. Он также вызывается, когда пользователь просто нажимает клавишу ввода в текстовом поле. – thriqon

ответ

0
var str="The rain in SPAIN stays mainly in the plain"; 
var n=str.match(/ain/g); 

Чтобы соответствовать строку с регулярным выражением в JavaScript, необходимо использовать match(). Проверить http://www.w3schools.com/jsref/jsref_match.asp

регулярное выражение для URL: /((https?\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/


Update:

function myFunction(){ 
var str="http://www.google.com"; 
var regexp = /((https?\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/g; 
if(str.match(regexp)){ 
    alert("okay"); 
    }else{ 
    alert("not okay"); 
} 
} 

библиотека регулярных выражений: https://github.com/javaquery/regexp/blob/master/regexp-0.0.1.js

+0

спасибо, но будет ли он соответствовать http? –

+0

Да, http://regexr.com?36i14 –

+0

спасибо, ваш скрипт работает значительно текущим. Я записал его в редакторе w3school. Но после проверки, как можно предпринять соответствующие действия, такие как alert() или показать какое-то сообщение. Не могли бы вы исправить обновленный код в моем вопросе в своем ответе? –

1

Вы можете использовать $ pattern1.test ($ URL) или $ pattern1 .match ($ URL) вместо использования preg_match ($ pattern_1, $ URL)

0

Проблема для вашего является регулярное выражение

У меня есть очень хороший один я обычно использую как это:

[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)? 

Он проверяет первый, если что-то перед первым. (. Ех тестирование в testing.mywebsite.com), а затем проверяет МойВебСайт и последний после последней точки он даже проверяет окончание

1

Попробуйте это:

function validateURL($URL) { 
    alert($URL); 
    $pattern_1 = /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i; 
    $pattern_2 = /^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i; 

    if($pattern_1.test($URL) || $pattern_2.test($URL)){ 
    alert("correct"); 
    return true; 
    } else{ 
    alert("Incorrect"); 
    return false; 
    } 
} 
+0

Функция preg_match принадлежит php, а не javascript. Если вы намеренно используете php, тогда приложите функцию под тегом php code. –

+0

Я добавил '.html' в regex, но даже' http: // www.paulgraham.com/herd.html' указан как неверный! мой первый тест не прошел –

+1

Я предположил, что вы не можете проверить URL-адрес, но ваш regEx работает. Поэтому я не тестировал regEx. Существует много вариантов regEx для проверки правильности URL. Выберите свой аромат: http://regexlib.com/Search.aspx?k=URL&c=-1&m=-1&ps=20 –

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