0

ユーザーがテキストボックスに*を挿入できないようにしようとしています。
これは私がやろうとしていたことですが、ここでは、これが唯一の挿入された文字である場合にのみ*を検出します。たとえば、次のようなテキスト:*など。
許可された文字が*と混在している場合、それを検出できません。たとえば、次のような入力:* hjhなど。
フィールド全体ではなく、*のみを ""に置き換える方法はありますか?

<script type="text/javascript">
    function testField(field) {
        var regExpr = new RegExp("[^*]");
        if(!regExpr.test(field.value)) {
            field.value = "";
        }
    }
</script>

<input type="text" id="searchGamesKeyword" class="searchGamesTextBox"
name="searchGamesKeyword" onblur="testField(this);" />
4

4 に答える 4

2

正規表現を文字列の最初と最後に固定するのを忘れました:new RegExp("[^*]")

これを試してください: -文字列の最初と最後に固定されているvar regExpr = /^[^*]*$/以外の文字のインスタンスを0個以上要求します。を除く任意の文字の1つ以上のインスタンスを強制したい場合は、*おそらく/^[^*]+$/より良いでしょう(注) 。+*

于 2012-06-21T02:51:48.990 に答える
1
<script type="text/javascript">
function testField(field, event) {
    if (event.charCode == 42) {
        event.preventDefault();
    }    
}
</script>

<input type="text" id="searchGamesKeyword" class="searchGamesTextBox"
name="searchGamesKeyword" onkeypress="javascript:testField(this, event);" />​
于 2012-06-21T02:54:30.343 に答える
1

これはどう:

function testField(field) {
    field.value = field.value.replace(/\*/g,"");
}

質問に示されているように呼び出されonblur=testField(this)、フィールドの現在の値を取得し、すべてのアスタリスクを空の文字列に置き換え、他のすべての文字はそのままにします。したがって、たとえば、"ab*cde*"になり"abcde"ます。

g最後の/\*/gは、グローバルに一致することを意味するフラグです。このフラグがないと、最初の一致が置き換えられます。

コードが機能しなかった理由は、文字列のどこかにアスタリスク以外の文字がある場合、 の正規表現[^*]が一致する (つまり、 から true を返す) ためです。.test()

于 2012-06-21T03:13:17.180 に答える
0

これにより、*を入力してコピーして貼り付けることができなくなります。ブラウザでJSが無効になっている可能性があるため、バックエンドを確認することを忘れないでください。

Javascript:

function testField(f)
{
    var o='',i,v=f.value;
    for(i=0;i<v.length;i++) if(v[i]!='*')o+=v[i];
    f.value=o;
}

HTML:

<input type="text" id="searchGamesKeyword" class="searchGamesTextBox" name="searchGamesKeyword" onkeyup="testField(this);" onchange="testField(this);" />

デモ: http: //jsfiddle.net/martinschaer/Sbg6w/(手動で最適化および縮小化;))

編集:フラグ(c)を使用すると、これまでに入力した内容を編集しようとすると、最後にキャレットが配置されるのを防ぐことができます。このような:

function testField(f)
{
    var t,c,i=0,o='',x="value",v=f[x],l=v.length;
    while(i<l){t=v[i++];if(t!='*')o+=t;else c=1}
    if(c)f[x]=o
}

ここでテストしてください:http://jsfiddle.net/martinschaer/Sbg6w/

于 2012-06-21T03:33:27.110 に答える