jQuery検証:デフォルトのエラーメッセージを変更する


363

jQuery検証プラグインでデフォルトのエラー値を変更する簡単な方法はありますか?

エラーメッセージを書き直して、アプリにとってより個人的なものにしたいのですが、フィールドがたくさんあるので、フィールドxに個別にメッセージを設定したくありません...

回答:


732

検証プラグインのに含まれる別のファイル/スクリプトにこのコードを追加して、メッセージを上書きし、自由に編集します:)

jQuery.extend(jQuery.validator.messages, {
    required: "This field is required.",
    remote: "Please fix this field.",
    email: "Please enter a valid email address.",
    url: "Please enter a valid URL.",
    date: "Please enter a valid date.",
    dateISO: "Please enter a valid date (ISO).",
    number: "Please enter a valid number.",
    digits: "Please enter only digits.",
    creditcard: "Please enter a valid credit card number.",
    equalTo: "Please enter the same value again.",
    accept: "Please enter a value with a valid extension.",
    maxlength: jQuery.validator.format("Please enter no more than {0} characters."),
    minlength: jQuery.validator.format("Please enter at least {0} characters."),
    rangelength: jQuery.validator.format("Please enter a value between {0} and {1} characters long."),
    range: jQuery.validator.format("Please enter a value between {0} and {1}."),
    max: jQuery.validator.format("Please enter a value less than or equal to {0}."),
    min: jQuery.validator.format("Please enter a value greater than or equal to {0}.")
});

31
うまくいきました。追加したばかりです:$ .extend($。validator.messages、{required: "Required"});
ラビラム

6
これを多言語フォームのクイックフィックスとして使用しました:if($( 'body')。attr( 'lang')== "es"){jQuery.extend ...};
Heraldmonkey 2013年

5
@NickCraver、私はこの質問でこれほど多くの賛成票を生成することを決して期待しなかったことを言いたかっただけです...そして、タイムリーで迅速な回答のためによくやった!
ケビンブラウン

3
ごめんなさい。メッセージは表示されず、minlengthを使用しましたが、必要なメッセージのみが表示されます。
Pratik、2015年

2
エラーメッセージにフォーム要素名を含めることはできますか?一般的なメッセージだけではなく。つまり、このフィールドは必須ではなく、ログインフィールドが必要です
Musaddiq Khan

239

検証呼び出しで独自のメッセージを指定できます。検証プラグインのドキュメント(http://jquery.bassistance.de/validate/demo/milk/)で使用されている「Remember the Milk」サインアップフォームからこのコードを持ち上げて短縮すると、独自のメッセージを簡単に指定できます。

var validator = $("#signupform").validate({
    rules: {
        firstname: "required",
        lastname: "required",
        username: {
            required: true,
            minlength: 2,
            remote: "users.php"
        }
    },
    messages: {
        firstname: "Enter your firstname",
        lastname: "Enter your lastname",
        username: {
            required: "Enter a username",
            minlength: jQuery.format("Enter at least {0} characters"),
            remote: jQuery.format("{0} is already in use")
        }
    }
});

validate(...)の完全なAPI:http : //jqueryvalidation.org/validate


7
入力ありがとうございます。質問をより詳しく読んだ場合は、デフォルトを変更する方法を尋ねています。一意のメッセージを指定できることはわかっています。
ケビンブラウン

41
単にピッチイン-これは、質問の目標を達成していなくても、私にとっては役に立ちました。
Brien Malone

1
ええ、これは実際にはデフォルトを変更するよりも良いアイデアのように見えますが、それはOPが最初に求めていたものです
Roger

2
@LisaCerilli同じだったので、次のように変更jQuery.format("...して修正しましたjQuery.validator.format("...
lehel

1
これは古いのですが、最初のリンクが壊れています。
akousmata

87

これは私のために働きました:

$.validator.messages.required = 'required';

$ .validator.messages.maxlength = jQuery.validator.format( "{0}文字以下で入力してください。"); 動作しません。代わりにNick Craversソリューションを使用することをお勧めします。
Vidar Vestnes、2014年

1
@VidarVestnesソリューションはあなたのシナリオでも機能します。あなたはフォーマット文字列を指定するだけで、プラグインが残りを行います:$.validator.messages.maxlength = "Please enter no more than {0} characters.";
rusmus

48

これは私のために働きました:

// Change default JQuery validation Messages.
$("#addnewcadidateform").validate({
        rules: {
            firstname: "required",
            lastname: "required",
            email: "required email",
        },
        messages: {
            firstname: "Enter your First Name",
            lastname: "Enter your Last Name",
            email: {
                required: "Enter your Email",
                email: "Please enter a valid email address.",
            }
        }
    })

この回答がjqueryValidationに対するものであり、jqueryFileUploadに対するものではない場合でもmessages$().fileupload関数にはオプションがあることに注意してください。
Xavier Portebois 2014年

39

すでにJQueryを使用しているので、ページ設計者にコードではなくカスタムメッセージをマークアップに追加させることができます。

<input ... data-msg-required="my message" ...

または、すべてのフィールドで単一の短いdata-msg属性を使用するより一般的なソリューション:

<form id="form1">
    <input type="text" id="firstName" name="firstName" 
        data-msg="Please enter your first name" />
    <br />
    <input type="text" id="lastName" name="lastName" 
        data-msg="Please enter your last name" />
    <br />
    <input type="submit" />
</form>

そしてコードには次のようなものが含まれています:

function getMsg(selector) {
    return $(selector).attr('data-msg');
}

$('#form1').validate({
    // ...
    messages: {
        firstName: getMsg('#firstName'),
        lastName: getMsg('#lastName')
    }
    // ...
});

これは、あなたが...あなたのjsファイルにないダイナミックなメッセージのセットを必要とする場合は特に、素晴らしい戦略です
チャールズ・ハーモン

@ user1207577、はい、カスタムメッセージを設定できますが、最小長と最大長のメッセージをどのように表示できますか。つまり、カスタムを設定した場合、最小および最大メッセージが表示されません。
Naren Verma 2017

22

別の可能な解決策は、フィールドをループして、各フィールドに同じエラーメッセージを追加することです。

$('.required').each(function(index) {
  $(this).rules("add", {
    messages: {
      required: "Custom error message."
   }
  });
});

1
この解決策はまさに私が探していたものでした...私のシナリオではすべてのフォームフィールドにラベルがあります。そのため、対応するラベルを見つけてメッセージの先頭に追加し、最終的に「名が必要です」と表示します。とてもいいですね、ガンスケ。
tjans 2013年

1
+1他の答えはすべて有効ですが、これは私が探していた構文です。
scott.korin 2013年

6

プラグインのソースコードを変更する代わりに、ダウンロードローカリゼーションフォルダーにあるような形式で追加のjsファイルを含め、validation.jsを読み込んだ後にそれを含めることができます。

jQuery.extend(jQuery.validator.messages, {
    required: ...,
    maxlength: jQuery.validator.format(...),
    ...
});

そうではありません。技術的にはあなたの答えと同じです。古いバージョンの回答にコメントを投稿しました。それから私自身の答えを書いた。すべて継続的にページを再読み込みする必要はありません。したがって、コメントを確認したときに編集した回答だけが表示されました。
ジッタ

5

@ジョシュ:リソースバンドルの翻訳されたメッセージでソリューションを拡張できます

<script type="text/javascript">
    $.validator.messages.number = '@Html.Raw(@Resources.General.ErrorMessageNotANumber)';
</script>

このコード部分を_Layout.cshtml(MVC)に入れると、すべてのビューで使用できます


4

こんなに簡単だとは思っていませんでした。そのような検証を処理するプロジェクトに取り組んでいました。

以下の答えは、それほど努力せずに検証メッセージを変更したい人にとって大きな助けになります。

以下のアプローチでは、「このフィールド」の代わりに「プレースホルダー名」を使用しています。

簡単に変更できます

   // Jquery Validation   
   $('.js-validation').each(function(){

       //Validation Error Messages 

       var validationObjectArray = [];

       var validationMessages = {};

       $(this).find('input,select').each(function(){  // add more type hear

          var singleElementMessages = {};

          var fieldName = $(this).attr('name');

          if(!fieldName){  //field Name is not defined continue ;
              return true;
          }


          // If attr data-error-field-name is given give it a priority , and then to placeholder and lastly a simple text

          var fieldPlaceholderName = $(this).data('error-field-name') || $(this).attr('placeholder') || "This Field";

          if( $( this ).prop( 'required' )){

              singleElementMessages['required'] = $(this).data('error-required-message') || $(this).data('error-message')  || fieldPlaceholderName + " is required";

          }

          if( $( this ).attr( 'type' ) == 'email' ){

              singleElementMessages['email'] = $(this).data('error-email-message') || $(this).data('error-message')  || "Enter valid email in "+fieldPlaceholderName;

          }       



          validationMessages[fieldName] = singleElementMessages;

       });


       $(this).validate({
          errorClass   : "error-message",
          errorElement : "div",
          messages     : validationMessages  
       });  
   });  

これを共有していただきありがとうございます。「errorClass」と「errorElement」の使い方は天才です!これで、検証から作成されたエラーメッセージのスタイルと場所を適用できます。
justdan23

3

最新バージョンには、インラインで実行できる機能がいくつかあります。

単純な入力フィールドの場合は、次のdata-validation-error-msgように属性を追加できます-

data-validation-error-msg="Invalid Regex"

少し重いものが必要な場合は、validate関数に渡されるすべての値を持つ変数を使用して、完全にカスタマイズできます。詳細については、このリンクを参照してください-https://github.com/victorjonsson/jQuery-Form-Validator#fully-customizable


1
これは、OPが要求したjQuery検証プラグインとは異なるプラグインです。ただし、特にHTMLに検証関連のデータ(ルール、メッセージ)を配置することに魅力がある場合(jQuery検証プラグインは、すべてにJavaScriptを使用して逆の方法をとります)、悪い選択ではありません。レコードの別の代替案について述べると、Parsley.jsは、HTML属性に依存する、よく使用されるフル機能の検証プラグインです。
Endre Both

2

デフォルトのエラーメッセージをすべて削除するには

$.validator.messages.required = "";

1
特定の分野でこれを行う方法は?
151291

1

jQueryフォーム検証カスタムエラーメッセージ-tutsmake

デモ

$(document).ready(function(){
  $("#registration").validate({
    // Specify validation rules
    rules: {
      firstname: "required",
      lastname: "required",
      email: {
        required: true,
        email: true
      },      
      phone: {
        required: true,
        digits: true,
        minlength: 10,
        maxlength: 10,
      },
      password: {
        required: true,
        minlength: 5,
      }
    },
    messages: {
      firstname: {
      required: "Please enter first name",
     },      
     lastname: {
      required: "Please enter last name",
     },     
     phone: {
      required: "Please enter phone number",
      digits: "Please enter valid phone number",
      minlength: "Phone number field accept only 10 digits",
      maxlength: "Phone number field accept only 10 digits",
     },     
     email: {
      required: "Please enter email address",
      email: "Please enter a valid email address.",
     },
    },
  
  });
});
<!DOCTYPE html>
<html>
<head>
<title>jQuery Form Validation Using validator()</title>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.js"></script>
<style>
  .error{
    color: red;
  }
  label,
  input,
  button {
    border: 0;
    margin-bottom: 3px;
    display: block;
    width: 100%;
  }
 .common_box_body {
    padding: 15px;
    border: 12px solid #28BAA2;
    border-color: #28BAA2;
    border-radius: 15px;
    margin-top: 10px;
    background: #d4edda;
}
</style>
</head>
<body>
<div class="common_box_body test">
  <h2>Registration</h2>
  <form action="#" name="registration" id="registration">
 
    <label for="firstname">First Name</label>
    <input type="text" name="firstname" id="firstname" placeholder="John"><br>
 
    <label for="lastname">Last Name</label>
    <input type="text" name="lastname" id="lastname" placeholder="Doe"><br>
 
    <label for="phone">Phone</label>
    <input type="text" name="phone" id="phone" placeholder="8889988899"><br>  
 
    <label for="email">Email</label>
    <input type="email" name="email" id="email" placeholder="john@doe.com"><br>
 
    <label for="password">Password</label>
    <input type="password" name="password" id="password" placeholder=""><br>
 
    <input name="submit" type="submit" id="submit" class="submit" value="Submit">
  </form>
</div>
 
</body>
</html>


-2

これらのカスタムエラーメッセージの代わりに、テキストフィールドのタイプを指定できます。

例:フィールドのタイプをtype = 'email'に設定します

その後、プラグインはフィールドを識別し、正しく検証します。


彼はそれを正しく検証するように求めず、メッセージを書き換えるように求めます。「エラーメッセージを書き換えて、自分のアプリにとってより個人的なものにしたい」
Benoit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.