【问题标题】:JS - Check For http:// In TextField InputJS - 在 TextField 输入中检查 http://
【发布时间】:2012-07-02 10:34:27
【问题描述】:

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

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

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

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

谢谢!

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

【问题讨论】:

    标签: javascript regex url uitextfield titanium


    【解决方案1】:

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

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

    【讨论】:

    • 我看到这是基于网络的。我将尝试实现这一点,我会尽快回复您
    • 为什么正则表达式会太复杂?
    • @lawlOr 看看我上面的答案,它甚至没有进行字符串替换。这种问题不需要多想。任何时候我做一个正则表达式都需要时间来设计和测试。这可能反映了我缺乏正则表达式的熟练程度——我认为这是一个常见的缺陷。
    • @OrbitingEden hrm,不想冒犯任何人,但我使用了正则表达式,我的解决方案是 2-liner 在我看来它和子字符串一样清楚:) (我真的只是在问出于好奇,也许你看到了我没有看到的东西......)
    • @lawl 或者我承认我自己的局限性,并推断大多数开发人员与我一样缺乏对正则表达式的熟练程度。我在需要的地方使用正则表达式。不必要地使用它会使代码 Augean 变得难以理解。
    【解决方案2】:
    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...
    

    打破它...

    • ^ 是模式的开始
    • $ 是模式的结尾
    • (...|...) 要么是左边要么是右边
    • \/\. 在必要时使用 \ 转义特殊字符
    • ? 将前一个字符设为可选

    【讨论】:

    • 问题,match 是正则表达式吗?
    • 是的,正如你所说,我知道 OP 规定此时什么都不做
    • .match() 是一种对字符串进行操作的方法,所以...var x = "my string"; alert(x.match(/^my/)); 将提醒一个真实值,因为存储在 x 中的字符串与 /es 之间定义的正则表达式匹配987654333@方法。
    • 知道了,我现在就试试你的解决方案!
    【解决方案3】:

    这是另一个解决方案:

    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/

    【讨论】:

    • 在所有情况下都能完美运行,但只有一个,我想我已经掌握了它,所以我正在尝试修复它,但情况是当你拥有完整的 http:// 和 www.,它附加了另一个 www。无论如何,你会得到答案,因为这很好而且很简单!
    • 试图修复它,仍然不起作用。如果你有机会,如果你能修改它以包含完整的 http:// 和 www,那就太好了。一起。否则,我相信我最终会得到它。谢谢!
    • 我修复了它并更新了演示。关键是将所有逻辑包装在检查中,以查看 url 是否正确。
    【解决方案4】:

    我刚刚破解了这个。是的,它很丑,但它也可以处理 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));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 2014-03-01
      相关资源
      最近更新 更多