2014-08-27 34 views
0

所有正則表達式都通過此js fiddle帶或不帶http和www的URL驗證

當我將此正則表達式移到我的asp.net頁面時,正則表達式驗證程序#three,#seven和#eight被視爲無效。

ASP.net:

<asp:RegularExpressionValidator ID="RegularExpressionValidator8" ControlToValidate="txtHomePage" 
                runat="server" CssClass="StandardText" Display="Dynamic" SetFocusOnError="true" 
                ErrorMessage="Invalid URL" ValidationExpression="^(?!www | www\.)[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$"></asp:RegularExpressionValidator> 

JavaScript代碼:

function checkUrlTest(url){ 

    // /^(?:(http|https|ftp):\/\/)?(?:[\w-]+\.)+[a-z]{2,6}(\/)?/i 
    // ^(?!www | www\.)[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$ 

    var urlregex = new RegExp("^(?!www | www\.)[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$") 

      return urlregex.test(url); 
     } 
var one = "yahoo.com"; 
var two = "www.yahoo.com"; 
var three = "http://www.yahoo.com"; //fails on .net page 
var four = "yahoo.org"; 
var five = "somesite.org" 
var six = "www.somesite.org" 
var seven = "http://somesite.org" //fails on .net page 
var eight = "https://www.somesite.org" //fails on .net page 
var nine = "somesite.org?case=1" 

     alert(
      one + '===> ' + checkUrlTest(one) + "\n" + 
      two + '===> ' + checkUrlTest(two) + "\n" + 
      three + '===> ' + checkUrlTest(three) + "\n" + 
      four + '===> ' + checkUrlTest(four) + "\n" + 
      five + '===> ' + checkUrlTest(five) + "\n" + 
      six + '===> ' + checkUrlTest(six) + "\n" + 
      seven + '===> ' + checkUrlTest(seven) + "\n" + 
      eight + '===> ' + checkUrlTest(eight) + "\n" + 
      nine + '===> ' + checkUrlTest(nine) 
     ); 

缺什麼在這裏,我是無法找到?

+0

我猜它是斜槓//導致問題:-)我不是正則表達式的專家,但我認爲從經驗中使用正則表達式的不同風格到本地JavaScript – splig 2014-08-27 15:51:20

+0

\反斜槓當它出現在'''引號內時需要逃脫。 – 2014-08-27 16:03:29

+0

您的'^ '正在消除'https?//'前綴:它在行開頭後立即尋找'www'。請參閱http://regex101.com/r/gU2mM3/1 – OnlineCop 2014-08-27 16:03:53

回答

1

^^(www | www\.)排除在前面包含https?的行。您可以使用非捕獲組和?到可選找到這些情況:

^(?:https?://|s?ftps?://)?(?!www | www\.)[A-Za-z0-9_-]+\.+[A-Za-z0-9.\/%&=\?_:;-]+$ 

,將匹配所有,但最後兩行:

yahoo.com 
www.yahoo.com 
http://www.yahoo.com 
yahoo.org 
somesite.org 
www.somesite.org 
http://somesite.org 
https://www.somesite.org 
somesite.org?case=1 

www somesite.org // Space after 'www' 
www.example.com // Leading space 

regex101 example

+0

謝謝,我已經修復了在jsfiddle中的這個工作,而不是爲什麼它不在asp.net頁面上工作。 – 2014-08-27 16:30:38

相關問題