2

我正在使用 Appcelerator 的 Titanium IDE 用 Ja​​vaScript 编写我的应用程序。我一直在研究这个并试用 Regex 大约两个小时。无论如何,我的问题是:

我有一个网址栏。如果用户以“www.”开始输入。我希望它在它前面添加'http://',如果它们以'http://'开头,它就不会添加它。而且,如果没有“www”。或者,它会添加完整的“http://www.”。

解决这个问题的一种实用方法可能是使用正则表达式(我以前从未使用过,没有任何经验)或查看前两个字母是“ht”还是“ww”,如果那不匹配,那么它只会添加“http://www”。

我刚刚在上面发布的是我认为一个人会做的事情,而且我很可能听起来完全疯了,因为这没有任何意义。我并不是真的要求写出整个代码。我可以添加各种东西,我只是在寻找一些可能对我能够插入和使用/修改有用的代码/输入。

谢谢!

编辑:很好的回应!我敢肯定,如果不是全部都有效,所以我尽了最大努力并投了赞成票:)

4

4 回答 4

3

正则表达式对于这种字符串操作来说太复杂了。试试这个:

<input onchange="testUrl(this)">

<script>
function testUrl(el){
    if(el.value.indexOf('http://') == 0){
        if(!el.value.indexOf('http://www.')){
            el.value = 'http://' + el.value.substr(6);
        }
     } else {
        el.value = 'http://www.' + el.value.substr(6);
     }
}
</script>
于 2012-07-01T23:49:36.630 回答
1

这是另一个解决方案:

var appendHttpToUrl = function(url){
    var httpwww = "http://www.";
    var rx = /(^http:\/\/|^www\.)/g;
    if(url.indexOf(httpwww) === -1){
      if(url.indexOf("http://") > -1 || url.indexOf("www.") > -1){
        url = url.replace(rx,httpwww);
      }else{
        url = httpwww+url;
      }
    }
    return url;
}

这是一个演示http://jsfiddle.net/TJn7A/5/

于 2012-07-01T23:54:57.483 回答
1
if(url.match(/^http:\/\/$/)
  // do stuff for when they start with http://

if(url.match(/^www\./))
  // do stuff for when they start with www

if(!url.match(/(www?\.?|htt?p?:?\/?\/?)/))
  // do stuff for a matching ww or ht...

打破它...

  • ^是模式的开始
  • $是模式的结束
  • (...|...)是左边还是右边
  • \/\.在必要时转义特殊字符\
  • ?使前一个字符可选
于 2012-07-01T23:50:56.610 回答
0

我刚刚破解了这个。是的,它很丑,但它也可以处理 https :)

function fixURL(input){
    var r = input.match(/^(https?:\/\/)?(www\.)?(.*)$/);
    return ((r[1] ? r[1] : 'http://') + (r[2]?r[2]:'')  + r[3]);
}
var input="example.com/test";
alert(fixURL(input));

如果您发现此功能失败的情况。请修复它;-)

于 2012-07-02T00:00:24.170 回答