私はjQuery検証プラグインを使用しています。素晴らしいもの!ASP.NETバリデーターの代わりにjQueryを使用するように既存のASP.NETソリューションを移行したいと思います。正規表現バリデーターの代替品がありません。私はこのようなことができるようになりたいです:
$("Textbox").rules("add", { regularExpression: "^[a-zA-Z'.\s]{1,40}$" })
これを達成するためにカスタムルールを追加するにはどうすればよいですか?
私はjQuery検証プラグインを使用しています。素晴らしいもの!ASP.NETバリデーターの代わりにjQueryを使用するように既存のASP.NETソリューションを移行したいと思います。正規表現バリデーターの代替品がありません。私はこのようなことができるようになりたいです:
$("Textbox").rules("add", { regularExpression: "^[a-zA-Z'.\s]{1,40}$" })
これを達成するためにカスタムルールを追加するにはどうすればよいですか?
回答:
redsquareの答えのおかげで、私はこのようなメソッドを追加しました:
$.validator.addMethod(
"regex",
function(value, element, regexp) {
var re = new RegExp(regexp);
return this.optional(element) || re.test(value);
},
"Please check your input."
);
正規表現に対して検証するために行う必要があるのはこれだけです:
$("#Textbox").rules("add", { regex: "^[a-zA-Z'.\\s]{1,40}$" })
さらに、メソッド "pattern"を含むadditional-methods.jsというファイルがあるようです。これは、引用符なしのメソッドを使用して作成された場合、RegExpになる可能性があります。
patternこの関数は、今の例を作り、これを行うための好ましい方法です。
$("#Textbox").rules("add", { pattern: "^[a-zA-Z'.\\s]{1,40}$" })
http://bassistance.de/jquery-plugins/jquery-plugin-validation/
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/additional-methods.js
addMethod()を使用できます
例えば
$.validator.addMethod('postalCode', function (value) {
return /^((\d{5}-\d{4})|(\d{5})|([A-Z]\d[A-Z]\s\d[A-Z]\d))$/.test(value);
}, 'Please enter a valid US or Canadian postal code.');
jQuery正規表現バリデーターを実行するためのすべての要素をまとめるのに問題がありましたが、それを機能させることができました...完全に機能する例を以下に示します。jQuery Validation Pluginにある「Validation」プラグインを使用します
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="http://YOURJQUERYPATH/js/jquery.js" type="text/javascript"></script>
<script src="http://YOURJQUERYPATH/js/jquery.validate.js" type="text/javascript"></script>
<script type="text/javascript">
$().ready(function() {
$.validator.addMethod("EMAIL", function(value, element) {
return this.optional(element) || /^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/i.test(value);
}, "Email Address is invalid: Please enter a valid email address.");
$.validator.addMethod("PASSWORD",function(value,element){
return this.optional(element) || /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$/i.test(value);
},"Passwords are 8-16 characters with uppercase letters, lowercase letters and at least one number.");
$.validator.addMethod("SUBMIT",function(value,element){
return this.optional(element) || /[^ ]/i.test(value);
},"You did not click the submit button.");
// Validate signup form on keyup and submit
$("#LOGIN").validate({
rules: {
EMAIL: "required EMAIL",
PASSWORD: "required PASSWORD",
SUBMIT: "required SUBMIT",
},
});
});
</script>
</head>
<body>
<div id="LOGIN_FORM" class="form">
<form id="LOGIN" name="LOGIN" method="post" action="/index/secure/authentication?action=login">
<h1>Log In</h1>
<div id="LOGIN_EMAIL">
<label for="EMAIL">Email Address</label>
<input id="EMAIL" name="EMAIL" type="text" value="" tabindex="1" />
</div>
<div id="LOGIN_PASSWORD">
<label for="PASSWORD">Password</label>
<input id="PASSWORD" name="PASSWORD" type="password" value="" tabindex="2" />
</div>
<div id="LOGIN_SUBMIT">
<input id="SUBMIT" name="SUBMIT" type="submit" value="Submit" tabindex="3" />
</div>
</form>
</div>
</body>
</html>
正規表現を文字列として定義する理由はありません。
$.validator.addMethod(
"regex",
function(value, element, regexp) {
var check = false;
return this.optional(element) || regexp.test(value);
},
"Please check your input."
);
そして
telephone: { required: true, regex : /^[\d\s]+$/, minlength: 5 },
この方法でもっと良くなりますか?
var re = new RegExp(regexp);機能で
PeterTheNiceGuyの答えを少し拡張する:
$.validator.addMethod(
"regex",
function(value, element, regexp) {
if (regexp.constructor != RegExp)
regexp = new RegExp(regexp);
else if (regexp.global)
regexp.lastIndex = 0;
return this.optional(element) || regexp.test(value);
},
"Please check your input."
);
これにより、正規表現オブジェクトをルールに渡すことができます。
$("Textbox").rules("add", { regex: /^[a-zA-Z'.\s]{1,40}$/ });
オブジェクトに-flagが設定されているlastIndex場合、プロパティをリセットする必要gがありRegExpます。そうでない場合、対象の文字列が異なっていても、その正規表現との最後の一致の位置から検証を開始します。
私が持っていたいくつかの他のアイデアは、あなたが正規表現の配列を使用できるようにすることでした、そして正規表現の否定のための別のルール:
$("password").rules("add", {
regex: [
/^[a-zA-Z'.\s]{8,40}$/,
/^.*[a-z].*$/,
/^.*[A-Z].*$/,
/^.*[0-9].*$/
],
'!regex': /password|123/
});
しかし、それらを実装することは多すぎるでしょう。
addMethodドキュメントで述べたように:
注意:パラメータと値を照合する正規表現メソッドを追加するのは魅力的ですが、それらの正規表現を独自のメソッド内にカプセル化する方がずっときれいです。わずかに異なる式がたくさん必要な場合は、共通のパラメーターを抽出してみてください。正規表現のライブラリ:http : //regexlib.com/DisplayPatterns.aspx
つまり、正規表現ごとにメソッドを追加する必要があります。オーバーヘッドは最小限ですが、正規表現自体を何度も複製することなく、正規表現に名前(過小評価しないでください)、デフォルトメッセージ(便利)、およびさまざまな場所で再利用する機能を与えることができます。
私はそれをこのように機能させました:
$.validator.addMethod(
"regex",
function(value, element, regexp) {
return this.optional(element) || regexp.test(value);
},
"Please check your input."
);
$(function () {
$('#uiEmailAdress').focus();
$('#NewsletterForm').validate({
rules: {
uiEmailAdress:{
required: true,
email: true,
minlength: 5
},
uiConfirmEmailAdress:{
required: true,
email: true,
equalTo: '#uiEmailAdress'
},
DDLanguage:{
required: true
},
Testveld:{
required: true,
regex: /^[0-9]{3}$/
}
},
messages: {
uiEmailAdress:{
required: 'Verplicht veld',
email: 'Ongeldig emailadres',
minlength: 'Minimum 5 charaters vereist'
},
uiConfirmEmailAdress:{
required: 'Verplicht veld',
email: 'Ongeldig emailadres',
equalTo: 'Veld is niet gelijk aan E-mailadres'
},
DDLanguage:{
required: 'Verplicht veld'
},
Testveld:{
required: 'Verplicht veld',
regex: '_REGEX'
}
}
});
});
正規表現が間にあることを確認してください/:-)
ファイルでpattern定義されたものを使用additional-methods.jsできます。このadditional-methods.jsファイルは、 jQuery Validate依存関係の後に含める必要があることに注意してください。
$("#frm").validate({
rules: {
Textbox: {
pattern: /^[a-zA-Z'.\s]{1,40}$/
},
},
messages: {
Textbox: {
pattern: 'The Textbox string format is invalid'
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/additional-methods.min.js"></script>
<form id="frm" method="get" action="">
<fieldset>
<p>
<label for="fullname">Textbox</label>
<input id="Textbox" name="Textbox" type="text">
</p>
</fieldset>
</form>
これは実際のコードです。
function validateSignup()
{
$.validator.addMethod(
"regex",
function(value, element, regexp)
{
if (regexp.constructor != RegExp)
regexp = new RegExp(regexp);
else if (regexp.global)
regexp.lastIndex = 0;
return this.optional(element) || regexp.test(value);
},
"Please check your input."
);
$('#signupForm').validate(
{
onkeyup : false,
errorClass: "req_mess",
ignore: ":hidden",
validClass: "signup_valid_class",
errorClass: "signup_error_class",
rules:
{
email:
{
required: true,
email: true,
regex: /^[A-Za-z0-9_]+\@[A-Za-z0-9_]+\.[A-Za-z0-9_]+/,
},
userId:
{
required: true,
minlength: 6,
maxlength: 15,
regex: /^[A-Za-z0-9_]{6,15}$/,
},
phoneNum:
{
required: true,
regex: /^[+-]{1}[0-9]{1,3}\-[0-9]{10}$/,
},
},
messages:
{
email:
{
required: 'You must enter a email',
regex: 'Please enter a valid email without spacial chars, ie, Example@gmail.com'
},
userId:
{
required: 'Alphanumeric, _, min:6, max:15',
regex: "Please enter any alphaNumeric char of length between 6-15, ie, sbp_arun_2016"
},
phoneNum:
{
required: "Please enter your phone number",
regex: "e.g. +91-1234567890"
},
},
submitHandler: function (form)
{
return true;
}
});
}
フラグが正規表現に存在する場合、主にjquery検証プラグインのマークアップ表記を使用し、投稿されたサンプルは機能しませんでした。
<input type="text" name="myfield" regex="/^[0-9]{3}$/i" />
したがって、次のスニペットを使用します
$.validator.addMethod(
"regex",
function(value, element, regstring) {
// fast exit on empty optional
if (this.optional(element)) {
return true;
}
var regParts = regstring.match(/^\/(.*?)\/([gim]*)$/);
if (regParts) {
// the parsed pattern had delimiters and modifiers. handle them.
var regexp = new RegExp(regParts[1], regParts[2]);
} else {
// we got pattern string without delimiters
var regexp = new RegExp(regstring);
}
return regexp.test(value);
},
"Please check your input."
);
もちろん、このコードと上記のいずれかを組み合わせてRegExpオブジェクトをプラグインに渡すこともできるようになりましたが、この演習は不要だったので、読者に任せました;-)。
PS:そのためのプラグインもバンドルされています、https://github.com/jzaefferer/jquery-validation/blob/master/src/additional/pattern.js