2009-08-18 2 views
0
function trim(str,options){ 
    var string = str.replace(/^\s\s*/, ''), 
     ws = /\s/, 
     i = str.length, 
     j = -1; 
    if(options==="begin"){while(ws.test(string.charAt(++j)));return string.slice(j,i);} 
    if(options==="end"){while(ws.test(string.charAt(--i)));return string.slice(j+1,i+1);} 
    while(ws.test(string.charAt(--i)));while(ws.test(string.charAt(++j))); 
    return string.slice(j, i + 1); 
} 

この関数は、C#で見つかったTrim()メソッドの実装です。デモでJavascript関数を使用できない

私は、先頭と末尾の両方でwithspaceを削除するオプションを追加しました。問題は、私はそれをデモで動作させることができないということです。私がやった何

はこれです:すべての

var a = "   zareaerar arzare  "; 
var b = "aezze   azeze  a "; 
var c = "azrazza rzrzrzrp" 
var d = " aezzaeazeazeaz   azez "; 

document.write('<p style="backround:#ff0000">',trim(a,"begin"),'</p>','<br />'); 
document.write('<p style="backround:#ff0000">',trim(b,"begin"),'</p>','<br />'); 
document.write('<p style="backround:#ff0000">',trim(c,"begin"),'</p>','<br />'); 
document.write('<p style="backround:#ff0000">',trim(d,"begin"),'</p>','<br />'); 

まず、何の背景色が表示されず、文字列は、文字列の途中にスペースを失うように見える...

これはユーザー入力のみで動作しますか?最近、ストリングは自動的にトリミングされていますか?

+2

Trim()関数は何をすべきですか?端からスペースを取り除くだけであれば、それは10回も複雑すぎます。 – Thinker

答えて

9

1)あなたはタイプミス持っているので、あなたは背景が表示されない:backroundの代わりbackground

2をHTMLで)複数の空白には意味がありません。段落内の単語間に改行しない空白を挿入する場合は、&nbsp;を使用する必要があります。

Reference (W3 spec):ソース文書 における単語間の空白 の配列は( PRE要素の場合を除いて)全く異なる レンダリングワード間間隔をもたらすことができること

注。 特に、ユーザエージェントは、出力インターワードを生成するときに 畳み込み入力空白シーケンス スペースを入力する必要があります。の情報(lang属性、 HTTPの「Content-Language」ヘッダー フィールド([RFC2616]、セクション14.12を参照)、 ユーザーエージェント設定など)がない場合でも、このことは可能であり、実行する必要があります。 。

プレ要素は、 の書式付きテキストの場合に使用されます。空白の場合は、空白の が重要です。

+0

ええ、あなたは何を知っていますか?私は言葉が引用符の間にある限り、 を使用する必要がなかった前に、この問題を抱えたことはありませんでした。 –

+2

私はそれを疑います。 W3のHTML仕様をチェックしてください... –

+2

@baeltazor:私は真剣にそれも疑っています。コンテキストを "text/plain"として扱っているのでなければ、 ""(2つのスペース)と ""(1つのスペース)の間に*目に見える違いはありません。引用は重要ではありません。 – paracycle

3

これはあなたの質問に対する答えではありませんが、あなたのtrim機能はなぜ複雑なのですか?

あなたはただ行うことができます。

function trim(str, option) { 
    if (option === "begin") return str.replace(/^\s+/,""); 
    if (option === "end") return str.replace(/\s+$/,""); 

    return str.replace(/^\s+|\s+$/g,""); 
} 

あなたはとにかく、正規表現のテストを使用している場合は、あなたにもちょうどreplace方法で、すべての空白を置き換える可能性があります。

注:コードはhereに適合しています。

関連する問題