Javascript正则表达式适用于在线验证器,但代码失败

时间:2014-10-31 10:55:26

标签: javascript jquery regex validation

我试试这个正则表达式:^(?:https?://)?(?:www。)?((?:(?!www。|。)。)+。[a-zA-Z0-9 。] +)在这里的验证器中:regexplanet.com并且结果适用于所提供的输入,但它在这个小提琴中失败:jsfiddle

<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

3 个答案:

答案 0 :(得分: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

您可能想要编辑问题以更好地指定输入 和产出。一些例子会很好。

答案 1 :(得分:0)

给定一个输入字段,如:

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

我最终得到了这个解决方案,我首先将其验证为网址,然后获取没有'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/

答案 2 :(得分: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中我用.change

替换了.blur