0

プロジェクトでUFValidatorを使用していますが、カスタム検証チェックをいくつか追加したいと思います。

入力にaz0-9以外のものが含まれている場合にエラーが発生するユーザー名チェックを追加したいと思います。スペースも何もありません。同様に、azのみを許可するが、スペースは許可する名前チェックを追加したいと思います。

組み込みの電子メール検証に基づいてチェックを行っています。フィルタは次のとおりです。

var mail_filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

そして、ここに電子メールチェックのコードがあります:

// E-MAIL VALIDATION
    if (obj.hasClass('req-email')) {
        tmpresult = mail_filter.test(valAttr);
        if (!tmpresult) errorTxt = (valAttr == '') ? opts.errorMsg.reqMailEmpty : opts.errorMsg.reqMailNotValid;
        result = result && tmpresult;
    }

そして、これが私のフィルターです:

var username_filter = /^[a-zA-Z0-9]/;
var name_filter = /^[a-zA-Z ]/;

そしてここに私のコードがあります:

// USERNAME VALIDATION
    if (obj.hasClass('req-username')) {
        tmpresult = username_filter.test(valAttr);
        if (!tmpresult) errorTxt = (valAttr == '') ? opts.errorMsg.reqUsernameEmpty : opts.errorMsg.reqUsernameNotValid;
        result = result && tmpresult;
    }
// NAME VALIDATION
    if (obj.hasClass('req-name')) {
        tmpresult = name_filter.test(valAttr);
        if (!tmpresult) errorTxt = (valAttr == '') ? opts.errorMsg.reqNameEmpty : opts.errorMsg.reqNameNotValid;
        result = result && tmpresult;
    }

ここでもそれらを参照しました:

// gather inputs & check is valid
    $(merged_options.scope+' .req-email, '+merged_options.scope+' .req-string, '+merged_options.scope+' .req-same, '+merged_options.scope+' .req-both, '+merged_options.scope+' .req-numeric, '+merged_options.scope+' .req-date, '+merged_options.scope+' .req-min, '+merged_options.scope+' .req-username, '+merged_options.scope+' .req-name').each(function() {
        thisValid = $.formValidator.validate($(this),merged_options);
        boolValid = boolValid && thisValid.error;
        if (!thisValid.error) errorMsg  = thisValid.message;
    });

対応するエラーメッセージも存在しますが、表示する必要はないと思います。

これでうまくいくと思いましたが、試してみるとかなり変な動作をします。間違ったエラーメッセージを表示し、希望どおりに検証していません。彼らのウェブサイトをチェックしてここで検索しましたが、それに関連するものは何も見つかりません。

4

1 に答える 1

0

正規表現は、文字列の先頭に単一の文字が存在するかどうかのみをテストします。1 つまたは複数の文字に一致させることを示す
ために a を追加する必要があります (例: 、または範囲を指定することができます)。 +[a-z\d]+

たとえば、以下の正規表現は、文字列の長さが 1 ~ 20 文字である必要があることを指定しています。

var username_filter = /^[a-z\d]{1,20}$/i;
var name_filter = /^[a-z ]{1,20}$/i; 

終了文字$が必要です。または、文字列の先頭にある必要があるものだけを指定しています。

iフラグは、大文字と小文字を区別しない一致を意味します 。\dと同等[0-9]です。

于 2013-01-22T18:35:21.840 に答える