2

ID の検証方法があります。各 ID には、[a-z0-9_]大文字と小文字を区別しない文字のみを含めることができます。[^a-z]動作しているようですが、追加したい[^0-9]のですが動作しません。1 つのストリング パターンはどのように見えるべきですか?

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);
}
4

5 に答える 5

3

これはあなたが必要とするものです:

function isUserIdValid(user_id) {
  var patt = new RegExp('[^a-z0-9_]', 'ig');
  return patt.test(user_id);
}
于 2012-05-07T20:23:39.033 に答える
1

問題は、適切なループfor-inの代わりに構造を使用していることです。正規表現としてfor使用し、配列を正しく反復処理します。[^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);
于 2012-05-07T20:27:18.247 に答える
0

このようなものが機能するはずです:

var patt = new RegExp(/^[0-9]+$/, "ig");
于 2012-05-07T20:26:00.277 に答える
0

グローバル変数ではなく、ローカル変数になるようにtestUserIdswithを宣言する必要があります。var

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

  // rest of your code
}

また、正規表現を宣言するには、式をスラッシュで囲むことができます。これは次のようにクリーンです。

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

少し本題から外れましたが、指摘せずにはいられませんでした。

于 2012-05-08T02:31:43.087 に答える
0
function isUserIdValid(user_id) {
    var patt = new RegExp(/^[a-z0-9]+$/i);
    return patt.test(user_id);
}
于 2012-05-07T20:30:43.640 に答える