2012-07-01 18 views
2

我正在使用Appcelerator的Titanium IDE在JavaScript中编写我的应用程序。我一直在研究这个,现在尝试正则表达式大概两个小时。无论如何,我的问题是这样的:JS - 检查http://在TextField输入

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

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

我刚刚发布的内容是我认为会做的事情,我很可能听起来完全疯了,因为它没有任何意义。我并没有真正要求将整个代码写出来;我可以添加各种各样的东西,我只是在寻找可能对我有用的插件和使用/修改的代码/输入。

谢谢!

编辑:伟大的回应!我相信大多数 - 如果不是所有的工作,所以我尽我所能并upvoted :)

回答

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/

+0

在任何情况下都完美无缺,但我认为我在抓它,所以我试图解决它,但情况是,当您拥有完整的http://和www。时,它会追加另一个www。无论如何,你会得到答案,因为这很好很简单! – JTApps

+0

试图修复它,仍然无法正常工作。如果您有机会,如果您可以修改它以包含完整的http://和www,那就太好了。一起。否则,我相信我会最终得到它。谢谢! – JTApps

+0

我修复了它并更新了演示。关键是将所有的逻辑包装在一张支票中,看看url是否是好的。 – marteljn

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> 
+0

我看到这是基于Web的。我将尝试实现这一点,我会回复你 – JTApps

+0

为什么正则表达式太复杂了? – lawl0r

+0

@lawlOr看看我的上面的答案,甚至没有更换字符串。这种问题不需要超过几分钟。任何时候我做一个正则表达式都需要花时间来设计和测试。这可能反映了我缺乏正则表达能力 - 我认为这是一个普遍的缺陷。 –

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

其分解...

  • ^是模式
  • $的开始是一个模式
  • (...|...)结束时要么左边或右边部分
  • \/\.是逃避在必要时与\
  • ?特殊字符是使前一个字符可选
+0

问题,是否匹配正则表达式? – JTApps

+0

在你的第一个例子中,你的意思是*当字符串只有'http://'*时做些什么。 – alex

+0

是的,我的意思就像你说的,我知道OP指定在这一点上什么都不做 –

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)); 

如果你发现哪里该功能失败的情况。请修复它;-)