2014-10-31 33 views
0

我試試這個正則表達式:^(?:https?://)?(?:www。)?((?:(?!www。|。)。) + [A-ZA-Z0-9] +)在這裏的驗證:regexplanet.com和結果都很好,提供的投入,但在這個小提琴失敗:jsfiddleJavascript正則表達式適用於在線驗證器,但代碼失敗

<input type="text" id="domain"> 

$(document).ready(function(){ 
$('#domain').blur(function(){ 
var str = $.trim($(this).val()); 
var pat = /^(?:https?:\/\/)?(?:www\.)?((?:(?!www\.|\.).)+\.[a-zA-Z0-9.]+)/mg; 

if (pat.test(str)){ 
    var match = str.match(pat); 
    $(this).val(match); 
} 
else{ 
    $(this).val('Validation failed'); 
} 
}); 

我嘗試做的是給:www.gmail.com,http://www.gmail.com,gmail.com/example等,並剛剛獲得gmail.com

+0

我認爲這是在jsfiddle,jquery或Chrome中處理'.blur'事件的問題。如果您使用'.change'而不是'.blur'(並且這是我今天看到的第二個問題,模糊不能按預期工作),您的代碼就可以工作。 – pawel 2014-10-31 10:59:21

+0

您的預期產出是多少? – nu11p01n73R 2014-10-31 11:01:38

+0

適用於我,在最新的鉻。 – Ravi 2014-10-31 11:03:29

回答

0

給定一個輸入字段,如:

<input type='text' id='domain'/> 

我結束了這個解決方案中,我第一次驗證它作爲一個URL,然後獲取字符串沒有的「http://」,「https://開頭','www。'

$(document).ready(function(){ 

function ValidUrl(str) { 
    var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol 
    '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name 
    '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address 
    '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path 
    '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string 
    '(\\#[-a-z\\d_]*)?$','i'); // fragment locator 
    if(!pattern.test(str)) { 
    return false; 
    } else { 
    return true; 
    } 
} 

$('#domain').change(function(){ 
    var str = $.trim($(this).val()); 
    if(ValidUrl(str)){ 
     var pat = /^(https?:\/\/)?(?:www\.)?([^\/]+)/; 
     var match = str.match(pat); 
     console.log(match); 
     //$(this).val(str); 
    } 
    else{ 
     $(this).val('Validation failed'); 
    } 
}); 

});

另見本的jsfiddle:http://jsfiddle.net/6mrbbq9x/5/

0

這確實你問了這麼遠:

var tests = [ 
    'www.gmail.com', 
    'http://www.gmail.com', 
    'https://www.gmail.com', 
    'https://gmail.com/', 
    'www.gmail.com/asdf', 
    'gmail.com/', 
    'gmail.com/example' 
]; 

var domains = tests.map(function(url){ 
    return url.replace(/^(https?:\/\/)?(www\.)?|\/.*/g, ''); 
}) 

domains.every(function(domain){ 
    return domain === 'gmail.com'; 
}); // true 

您可能想要編輯您的問題以更好地指定輸入 和輸出。有些例子會很好。

+0

我只是尋找一種模式來擺脫www。,http:// ,https://並從其他可能的斜槓(/)中獲取其餘部分,例如從www.gmail.com/example我只想gmail.com,如果我有gmail.com.gr。無論/測試我想gmail.com.gr.whatever。清楚嗎?這小提琴:http://jsfiddle.net/6mrbbq9x/3/做我想要的,除了它也接受像gmail這樣的單詞,它離開它,因爲它是..我不想那樣...我會很高興,如果你可以提供一個解決方案, – sstauross 2014-10-31 12:40:57

0

按照註釋我相信你要替換

'www.gmail.com', 
'http://www.gmail.com', 
'https://www.gmail.com', 
'https://gmail.com/', 
'www.gmail.com/asdf', 
'gmail.com/', 
'gmail.com/example' with gmail.com only 

因此,這裏的正則表達式:

var pat = /^(https?:\/\/)?(?:www\.)?([^\/]+).*$/ 

另見本的jsfiddle:http://jsfiddle.net/6mrbbq9x/3/

在這jsfiddle我已經取代.blur與.change

+0

是的,但我不想匹配一個沒有.tld例如gmail(沒有.com)的詞,如果你把它放在當前的解決方案中,gmail停留在輸入中,我想顯示驗證在這種情況下失敗!儘管感謝你的回答.. – sstauross 2014-11-03 12:20:03