1

次のテキスト入力があるとしましょう:

<input class="required-field" type="text" name="create-user-username" pattern="/^[0-9]+$/" />

私のJSのどこかで、フォームの検証で次のスニペットを使用したいと思います:

$('.required-field').each(function() {
    var inputVal = $(this).val();
    var pattern = $(this).attr('pattern');

    if (pattern !== 'undefined') {
        if (inputVal.match(pattern)) {
            alert('Input is not valid');
        }        
    }

});

ただし、一致が機能しておらず、有効な解決策を見つけることができませんでした...

フォームはユーザーによって段階的に完成され、次のステップに進む前に各ページが検証されます。そのため、jQuery .validate を使用していません....

4

3 に答える 3

3

jsFiddle デモ

括弧がありません。

if (inputVal.match(pattern)) // <-- this one

@Christoph が述べたように、 a に対して一致させようとしてstringおり、メソッドを使用し.replace()て outer を削除するか/ /、入力要素自体のパターンを次のように変更できます。

input pattern="^[0-9]+$"

パターン変数を次のように変更します。

var pattern = new RegExp($(this).attr('pattern')); // now it'll all work

補足として、常にコンソール ログを確認してください (典型的なUncaught SyntaxError: Unexpected token {

また、未定義をチェックするときの最善の方法は次のとおりです。

typeof(pattern) !== 'undefined'

于 2012-11-16T15:50:32.270 に答える
2

patternは文字列であるため、次のようにする必要があります。

$(this).attr('pattern').replace(/\//g,"");

if (!inputVal.match(new RegExp(pattern))) { // also you missed a ! for negation

また、どちらかを使用します

if (!pattern) // uses falsyness of "undefined" - also catches the empty string

// or

if ( typeof pattern !== "undefined")

不一致の親を修正します。(inputVal.match(pattern) // <- missing )

于 2012-11-16T15:59:44.477 に答える
0

現在、パターンは文字列であり、を使用して実際の実数パターンに変換する必要がありますnew RegExp()

が自動的にスラッシュを追加するため、不要なスラッシュも削除/します。pattern="/^[0-9]+$/"new RegExp()

コードを見て、

<input class="required-field" type="text" name="create-user-username" pattern="^[0-9]+$" value=""/>
​ 


$('.required-field').each(function() {
    var inputVal = $(this).val();
    var pattern = $(this).attr('pattern');

    if (pattern != 'undefined') {
        pattern =  new RegExp(pattern)
        if (inputVal.match(pattern)){
            alert('Input is not valid');
        }        
    }

});​

デモ: http://jsfiddle.net/43eLD/1/

于 2012-11-16T16:01:45.853 に答える