如果字符串不存在,则将“http://”添加到字符串中



在我的laravel应用程序中,我处理用户提供的外部URL。有时用户会粘贴不带http://前缀的内容。UI已使用此问题的答案:如何使用JQuery和RegEx 检查包含http的URL

我试着使用这些说明

var lnk = $('#confirmation_URL').val();
var lnk2 = $('#confirmation_URL').val();
//adding http if not present
// if (lnk && !lnk.match(/^.+://.*/)) {  // produces jQuery error
if (lnk && !lnk.match(/^http([s]?)://.*/)) { // produces jQuery error
   var lnk = $('http://' + lnk2);
   console.log( "prefix http added successfully" );
}

当粘贴URL时,我得到了这个错误:

jquery-2.1.4.min.js:2 Uncaught Error: Syntax error, unrecognized expression: http://laravel.com/docs/5.1/migrationsga.error @ jquery-2.1.4.min.js:2ga.tokenize @ jquery-2.1.4.min.js:2ga.select @ jquery-2.1.4.min.js:2ga @ jquery-2.1.4.min.js:2n.fn.extend.find @ jquery-2.1.4.min.js:2n.fn.init @ jquery-2.1.4.min.js:2n @ jquery-2.1.4.min.js:2(anonymous function) @ dodaj:1460n.event.dispatch @ jquery-2.1.4.min.js:3r.handle @ jquery-2.1.4.min.js:3

我尝试了什么

jQUery 2.14和3.0beta1的控制台中都会弹出错误为了测试愚蠢的错误并排除潜在的原因(例如jQUery影响原始变量),我创建了两个内容相同的变量:lnklnk2

谢谢你的建议。

请尝试此

$('#confirmation_URL').keyup(function () {
        if (  ($(this).val().length >=5) && ($(this).val().substr(0, 5) != 'http:') && ($(this).val().substr(0, 5) != 'https') ) {
            $(this).val('http://' + $(this).val());
        }
    });

尝试首先创建RegExp对象

regex = new RegExp('^http([s]?)://.*')
if (lnk && !regex.test(lnk)) { 
   lnk.val('http://' + lnk2);
   console.log( "prefix http added successfully" );
}
var lnk = $('#confirmation_URL').val();
var lnk2 = $('#confirmation_URL').val();
//adding http if not present
// if (lnk && !lnk.match(/^.+://.*/)) {  // produces jQuery error
if (lnk && !lnk.match(/^http([s]?)://.*/)) { // produces jQuery error
   // Here produces error actually
   // lnk = $('http://' + lnk2);
   lnk = 'http://' + lnk2;
   $('#confirmation_URL').val(lnk);
   console.log( "prefix http added successfully" );
}

更新,对错误表示抱歉。

最新更新