0

そのため、HTML5 パターン属性で iPhone の数字パッドに最小限の正規表現 [0-9]* を使用しています。サーバー経由でメールを送信する送信機能もありました。ブラウザーが間違ったユーザー入力に基づいて送信をブロックしようとしているかどうかに関係なく、フォームを送信しようとしていることに気付くまで、すべてがうまく機能していました。

そのため、次のことを行いましたが、機能しません。

<script>
function validate(){
    var phone=/[0-9]*/;
    var x=document.forms["form"]["contactnum"].value;
    if (x!=phone){
        alert("Contact Number must be a valid phone number (no dashes)");
        return false;
    }

    else {
        alert("Thank you! We have received your information and will contact you shortly.");
        ajax('{{=URL('new_post')}}',['phone'], 'target');
            return false;
    }
}
</script>

問題は、if ステートメントで if (x==null || x=="") を設定した場合にのみ機能することです。他の変数と一致させようとすると、常に [0-9]* と一致していないと表示されます。私はすでにいくつかの複雑な正規表現を書いていますが、この単純なフォームでは何も使いたくありません。iPhone の数字パッドが欲しかっただけで、それが数字または null でない場合は送信しませんでした。数字である限り、電話番号に「2」を入力してもかまいません。

ありがとう。

4

3 に答える 3

3
if ( x.match(/^[0-9]+$/) ) {
  // valid
} else {
  // invalid
}
于 2012-06-01T18:48:11.060 に答える
2

それは正規表現の使い方ではありません:

if (!phone.test(x)) ...

また、数字だけで文字列を一致させたい場合は、試してください

var phone = /^\d*$/;

これは空の文字列にも一致します。少なくとも 1 桁が必要な場合は、+代わりに使用します。*

于 2012-06-01T18:47:48.560 に答える
1

ここでは、実際には 2 つの質問が 1 つにまとめられているようです。最初の部分では、 の使用方法を示していませんがvalidate()、onsubmit ハンドラー自体が false を返して、ブラウザーが通常の送信プロセスを完了しないようにする必要があることを覚えておいてください。たとえば、次の場合は機能しません。

$('#myform').submit(function(){
    validate();
});

ただし、これデフォルトの送信プロセスを正常に停止します。

$('#myform').submit(function(){
    return validate();
});

validate()false を返すと、ハンドラーは同じものを返します。

于 2012-06-01T18:48:04.723 に答える