0

我已经检查了之前关于 SO 的答案。我知道他们很酷。

这是我的机会:我正在获取文本框的值并将其传递给函数进行验证。它正确传递 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>

更新

 <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>
4

4 回答 4

1

您可以使用 $pattern1.test($URL) 或 $pattern1.match($URL) 而不是 preg_match($pattern_1, $URL)

于 2013-10-01T05:45:26.463 回答
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;
  }
}
于 2013-10-01T05:50:34.560 回答
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#!:.?+=&%@!\-\/]))?/


更新:

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

于 2013-10-01T05:43:22.357 回答
0

你的问题是你的正则表达式

我有一个很好的,我通常这样使用:

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

它首先检查是否在 first 之前有某些东西。(例如在 testing.mywebsite.com 中进行测试)然后检查 mywebsite 并在最后一个点之后最后检查它甚至检查结尾

于 2013-10-01T05:49:41.867 回答