2012-05-07 11 views
2

私はIDの検証方法を持っていますが、各IDには​​の大文字と小文字を区別しない文字しか含めることができません。 [^a-z]は機能しているようですが、[^0-9]を追加したいと思いますが、それは機能しません。 1つの文字列パターンはどのように見えますか?適用方法[^ 0-9]正規表現パターンjavascript

function foo() { 
    testUserIds = ['id23425860', 
    'yulka_rdtska', 
    'im?sel=2000000001', 
    'im?sel=2000000002']; 
    for (id in testUserIds) { 
    document.write(isUserIdValid(id) + '\r\n'); 
    } 
} 
function isUserIdValid(user_id) { 
    var patt = new RegExp('[^a-z]', 'ig'); 
    return patt.test(user_id); 
} 
+0

'[^ a-z0-9]'それを同じ文字クラスの中に入れてください。 –

+0

私はそれを試みました、それは私に間違った結果をもたらします: 'false false false false' – Vasya

+0

オハイオ州の男、申し訳ありません'のために私のエラーがただのために – Vasya

答えて

1

問題は、あなたの代わりに適切なforループのfor-in構文を使用していることです。 [^a-z0-9_]を正規表現として使用し、配列に対して正しく反復処理します。

JavaScriptでは、for (elem in arr)の配列を反復処理しないでください。その構文の目的は、オブジェクトのプロパティを反復処理することです。代わりにfor (var idx=0; idx<something; idx++)を使用してください。

function foo() { 
    testUserIds = ['id23425860', 
    'yulka_rdtska', 
    'im?sel=2000000001', 
    'im?sel=2000000002']; 

    // Use an incremental for loop here, NOT a for-in 
    // for-in is intended for iterating over object properties, not arrays. 
    for (var i=0; i<testUserIds.length; i++) { 
    console.log(isUserIdValid(testUserIds[i]) + '\r\n'); 
    } 
} 
function isUserIdValid(user_id) { 
    var patt = new RegExp('[^a-z0-9_]', 'ig'); 

    // Return the inversion of this, so isUserValid() is true if the user is valid 
    return !patt.test(user_id); 
} 

foo(); 
// Outputs 
true 
true 
false 
false 

注セットアップあなたの機能を持っている方法は、それが言うの反対を返すこと。あなたは無効な文字をチェックし、その逆を返すされています

// If it matched, it's invalid, otherwise valid 
return !patt.test(user_id); 
+0

ありがとう、ちょうどそれらが同じと言うGoogle Javascriptのスタイルガイドをチェックしました。 – Vasya

3

これは何が必要です:このような何かが動作するはず

function isUserIdValid(user_id) { 
    var patt = new RegExp('[^a-z0-9_]', 'ig'); 
    return patt.test(user_id); 
} 
+0

私のミスは 'のためのサイクル'値の: – Vasya

+0

ようこそStackOverflow!時々、あなたの間違いを見つけるのを助けるためにあなたの問題を誰かに話すことが必要になります。 :P答えを受け入れることを忘れないでください。 –

0

var patt = new RegExp(/^[0-9]+$/, "ig"); 
0
function isUserIdValid(user_id) { 
    var patt = new RegExp(/^[a-z0-9]+$/i); 
    return patt.test(user_id); 
} 
0

それはローカル変数ではなく、世界の一つだように、あなたはvartestUserIdsを宣言する必要があります。

var patt = /[^a-z]/ig; 

ビットオフトピックが、私は指摘して助けることができなかった:

function foo() { 
    var testUserIds = ['id23425860', 
    'yulka_rdtska', 
    'im?sel=2000000001', 
    'im?sel=2000000002']; 

    // rest of your code 
} 

はまた、あなたがそうのような、きれいであるスラッシュで式をラップすることができ、正規表現を宣言します。