jquery.Validation は、クライアント フォームを検証でき、優れたスケーラビリティを備えた多くのカスタマイズ可能なプロパティとメソッドを提供する優れた jquery プラグインです。実際の状況と合わせて、プロジェクトでよく使用される検証をサンプル DEMO にまとめました。この記事は、この例を説明することで Validation の応用を理解することを目的としています。
この例に含まれる検証は次のとおりです:
ユーザー名: 長さ、文字検証、再現性 Ajax 検証 (既に存在するかどうか)。
パスワード: 長さの確認、パスワードの確認の繰り返し。
電子メール: 電子メール アドレスの確認。
固定電話: 中国本土の固定電話番号の確認。
携帯電話番号: 中国本土の携帯電話番号の確認。
URL: Web サイトの URL アドレスの検証。
日付: 標準の日付形式の検証。
数値: 整数、正の整数の検証、数値範囲の検証。
ID カード: 中国本土の ID 番号の確認。
郵便番号: 本土の郵便番号を確認します。
ファイル: ファイル タイプ (サフィックス) の検証。たとえば、画像のみのアップロードが許可されます。
IP: IP アドレスの検証。
検証コード: 検証コード ajax 検証。
使用法:
1. jquery プラグインと jquery.validate プラグインを準備します
<script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.validate.js"></script>
2. CSS スタイルを準備します
ページ スタイルの詳細については説明しません。独自のスタイルを作成することも、デモ ページのソース コードを参照することもできます。ここで強調すべき重要なスタイルは、検証情報を表示するスタイルです:
label.error{color:#ea5200; margin-left:4px; padding:0px 20px; background:url(images/unchecked.gif) no-repeat 2px 0 } label.right{margin-left:4px; padding-left:20px; background: url(images/checked.gif) no-repeat 2px 0}
3.XHTML
<form id="myform" action="#" method="post"> <table width="100%" border="0" cellspacing="0" cellpadding="0" class="mytable"> <tr class="table_title"> <td colspan="2">jquery.validation 表单验证</td> </tr> <tr> <td width="22%" align="right">用户名:</td> <td><input type="text" name="user" id="user" class="input required" /> <p>用户名为3-16个字符,可以为数字、字母、下划线以及中文</p></td> </tr> <tr> <td align="right">密码:</td> <td><input type="password" name="pass" id="pass" class="input required" /> <p>最小长度:6 最大长度:16</p> </td> </tr> <tr> <td align="right">确认密码:</td> <td><input type="password" name="repass" class="input required" /></td> </tr> </table> </form>
ラベルに「必須」クラス スタイルを与えたことは言及する価値があります。その機能については以下で説明します。
4. 検証プラグインを適用します
Validation プラグインを呼び出すメソッド:
$(function(){ var validate = $("#myform").validate({ rules:{ //定义验证规则 ...... }, messages:{ //定义提示信息 ...... } }) });
rules: 検証ルールを key:value の形式で定義します。key は検証される要素で、value は文字列またはオブジェクトです。たとえば、ユーザー名の長さを確認し、空にすることを許可しません:
rules:{ user:{ required:true, maxlength:16, minlength:3 }, ...... }
実際には、XHTML コード内で必要に応じて input の class 属性を直接指定できるため、JS 部分で繰り返し記述する必要はありません。メール等の検証と同様に、inputのclass属性を直接メールに設定します。
メッセージ: プロンプト メッセージを key:value の形式で定義します。key は検証対象の要素で、値は検証が失敗したときに表示されます。
messages:{ user:{ required:"用户名不能为空!", remote:"该用户名已存在,请换个其他的用户名!" }, ...... }
この例に含まれる検証 JS は、上記のルールに従って記述されており、検証プラグインは次のように多くの基本的な検証メソッドをカプセル化します。
required:true には値が必要であり、空にすることはできません
Remote:url を使用すると、ユーザー名がすでに存在するかどうかを判断できます。サーバーは true を出力し、検証に合格したことを示します
minlength:6 最小の長さは 6 です
maxlength:16 最大長は 16 です
rangelength: 範囲の長さ
range:[10,20] 値の範囲は 10 ~ 20 です
電子メール: 本物の確認メール
url:true 確認 URL
dateISO:true 日付形式 'yyyy-mm-dd' を確認します
数字:true は数字のみです
accept:'gif|jpg' は、接尾辞が gif または jpg の画像のみを受け入れます。ファイルの検証によく使用される拡張子
qualTo:'#pass' はフォーム フィールドの値と等しく、パスワードの繰り返し入力を検証するためによく使用されます
さらに、プロジェクトの実際の状況に基づいていくつかの検証も拡張しました。検証コードは validate-ex.js にあります。この JS は使用前にロードする必要があります。次の検証が提供されます:
userName:true ユーザー名には、漢字、英字、数字、アンダースコアのみを含めることができます
isMobile:本当の携帯電話番号の確認
isPhone:true 本土の携帯電話番号の確認
isZipCode:本当の郵便番号の検証
isIdCardNo:true 中国本土の ID 番号の確認
ip:true IP アドレスの検証
上記で提供した検証方法は、基本的にほとんどのプロジェクトのニーズを満たします。他に特別な検証要件がある場合は、次のように拡張できます:
jQuery.validator.addMethod("isZipCode", function(value, element) { var zip = /^[0-9]{6}$/; return this.optional(element) || (zip.test(value)); }, "请正确填写您的邮政编码!");
トラブルシューティング:
1. プロジェクトにユーザー名が存在するかどうかを確認したところ、中国語入力の検証がサポートされていないことが判明しました。私の解決策は、encodeURIComponent でユーザー名をエンコードし、バックグラウンド PHP を使用して受け入れられた値を URL デコードすることです
user:{ remote: { url: "chk_user.php", //服务端验证程序 type: "post", //提交方式 data: { user: function() { return encodeURIComponent($("#user").val()); //编码数据 }} } },
<?php $request = urldecode(trim($_POST['user'])); usleep(150000); $users = array('月光光', 'jeymii', 'Peter', 'helloweba'); $valid = 'true'; foreach($users as $user) { if( strtolower($user) == $request ) $valid = 'false'; } echo $valid; ?>
我使用的服务端程序是PHP,您也可以使用ASP,ASP.NET,JAVA等。此外本例为了演示,用户名数据是直接写在服务端的,真正的应用是从数据库里取出的用户名数据,来和接收客户端的数据进行对比。
2、在验证checkbox和radio控件时,验证信息不会出现在最后的控件文本后面,而是直接跟在第一个控件的后面,不符合我们的要求。
解决办法是在validate({})追加以下代码:
errorPlacement: function(error, element) { if ( element.is(":radio") ) error.appendTo ( element.parent() ); else if ( element.is(":checkbox") ) error.appendTo ( element.parent() ); else if ( element.is("input[name=captcha]") ) error.appendTo ( element.parent() ); else error.insertAfter(element); }
3、重置表单。Form表单原始的重置方法是reset自带
<input type="reset" value="重 置" />
点击“重置”按钮,表单元素将会重置,但是再运行Validation插件后,验证的提示信息并没重置,就是那些提示信息没有消失。感谢Validation提供了重置表单的方法:resetForm()
$("input:reset").click(function(){ validate.resetForm(); });