Javascript regex在在线验证器上工作,但在代码中失败

Javascript regex works on online validator but fails in code

本文关键字:代码 失败 工作 regex 在线 验证 Javascript      更新时间:2023-09-26

我尝试这个正则表达式:^(?:https?://)?(?:www.)?((?:(?!www.|.).)+.[a-zA-Z0-9.]+)在验证器中:regexplanet.com,提供的输入结果良好,但在这个fiddle中失败: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

这就是您迄今为止所要求的:

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

您可能希望编辑您的问题以更好地指定您的输入以及输出。一些例子会很好。

给定一个输入字段,如:

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

根据评论,我认为你想更换

'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