2

AppceleratorのTitaniumIDEを使用してJavaScriptでアプリを作成しています。私はこれに取り組んでいて、約2時間正規表現を試しています。とにかく、私の質問はこれです:

URLバーがあります。ユーザーが「www」で入力を開始した場合。その前に「http://」を追加したいのですが、「http://」で始まる場合は追加されません。そして、「www」がない場合。どちらか、それは完全な「http://www。」を追加します。

これを実行する実際的な方法は、正規表現を使用する(これまで使用したことがない、経験がない)、または最初の2文字が「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
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 に答える
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 に答える
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 に答える