5

電話番号を検証するjqueryバリデーターに問題があります。したがって、電話番号の入力があるフォームでは、jqueryの追加のメソッドを使用して電話を検証します。コードは次のとおりです。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>stuff/title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/additional-methods.min.js"></script>
</head>
<body>
<script>
$(document).ready(function(e) {
    var val = $('#everything').validate({
        onkeyup: false,
        errorClass: "req_mess",
        ignore: ":hidden",
        rules: {
            phone: {
                required: true,
                minlength: 10,
                phoneUS: true
            }
        },
        messages: {
            phone: {
                required: "Please enter your phone number",
                phoneUS: "Please enter a valid phone number: (e.g. 19999999999 or 9999999999)"
            }
        }
    });
});
</script>
<form name="everything" id="everything" action="Private/Insert.php" method="post" style="display:none;" >
    Phone Number: <input type="text" name="phone" id="phone"/>
</form>
</body>
</html>

そして、データベースは電話番号の列で次のようになります。
電話
完全な電話番号(赤で消されている)が正しく挿入される場合もあれば、3桁だけが挿入される場合もあります。どうしてか分かりません。これはInternetExplorerと関係があるのでしょうか?誰かがこの問題に遭遇しましたか?なぜこれが起こっているのか誰かが知っていますか?誰かがそれを必要とするならば、これはjquery検証コードの全体です

4

3 に答える 3

16

電話番号にphoneUS検証メソッドを使用しています。これは、以下の両方の入力を受け入れます(例)。

  • 949-101-2020
  • 9491012020

最初の例は有効であると見なされているため、データベースに直接格納しようとしましたが、整数列または数値列を使用しているようです。MySQLを含む多くのデータベースは、最初の非数値文字の後にすべてをドロップするだけで、その値を整数に強制しようとします。varchar電話番号は実際には数値の意味を持たないため、電話番号を格納するためのフィールドを使用することを常にお勧めします(つまり、加算/減算することはありません)。

また、単にクライアント側の検証に依存することはお勧めできません。クライアント側の検証を(悪意を持って、または悪意を持って)だますのは非常に簡単なので、常にサーバー側でデータを検証する必要があります。

于 2012-11-25T05:27:35.847 に答える
3

電話テンプレートのカスタム検証は次のとおりです。

jQuery.validator.addMethod("phone", function (phone_number, element) {
        phone_number = phone_number.replace(/\s+/g, "");
        return this.optional(element) || phone_number.length > 9 &&
              phone_number.match(/^\(?[\d\s]{3}-[\d\s]{3}-[\d\s]{4}$/);
    }, "Invalid phone number");

例:123-123-1234

そして、ここに国の接頭辞が付いたフォーマットがあります:

  jQuery.validator.addMethod("phoneUS", function (phone_number, element) {
      phone_number = phone_number.replace(/\s+/g, "");
      return this.optional(element) || phone_number.length > 9 &&
      phone_number.match(/^\+[0-9]{11}$/);
  }, "Please specify a valid phone number");

phoneUSクラスを入力ex+41748987145に追加するだけです

このメソッドは、jquery検証の拡張機能です。このようにして、独自のカスタムルールを定義します。私を信じてください、あなたがそれらを必要とする状況があります。

于 2012-11-30T18:42:37.033 に答える
1

データベースフィールドが整数を保持していて、「987-123-1223」のようなものを送信している場合、データベースエンジンによっては、最初の桁のみが保存されます。

私はすでにこの問題を抱えています!簡単な文字列置換方法を使用してサーバー側で修正できます!

于 2012-11-25T05:15:06.323 に答える