1

次のコードを使用して、ユーザーが入力フィールド (id='username') にユーザー名を正しく書き込んだかどうかをテストしています。残念ながら、他の特殊文字 (^、*、+、§ など) が使用されている場合、コードはエラーを報告しません。

例えば:

ミッキー^

ppppppp§°

ミッキー12-22

それらはすべてテストに合格します。

残念ながら、私は数日を費やしましたが、問題を解決できませんでした.

ユーザー名の構文は次のとおりです。

  1. 最初の文字 = 文字
  2. 次の文字 = 文字 OR 数字 OR _ (アンダースコア) . (ポイント) - (ダッシュ)
  3. 最小長 5 文字
  4. 最大長 20 文字

これはコードです:

> var returncode = true; 
> var userinput = $('#username').val(); 
> var pattern = new RegExp(/^[a-zA-Z]{1}|[a-zA-Z0-9_\.\-]{4, 19}$/); 

> if(!pattern.test(userinput)) {    
>      returncode = false;
> }

どんな助けでも大歓迎です。

ありがとうございました

4

3 に答える 3

2
new RegExp(/^[a-zA-Z]{1}|[a-zA-Z0-9_\.\-]{4, 19}$/)

正規表現リテラルはすでに正規表現です。再度キャストする必要はありません。{1}冗長です。a-zA-Z0-9_もござい\wます。.文字クラスでは特別な意味はなく-、最後にエスケープする必要はありません。とにかく、最初のものは、フラグを[a-zA-Z]使用することができます。だから邪魔にならないように:[a-z]i

/^[a-z]|[\w.-]{4,19}$/i

実際の問題に進みます。^$はどちらも「または」のオプションであるため、1 文字または 4 ~ 19 文字の文字、数字、アンダースコア、ピリオド、またはダッシュで始まるユーザー名はすべて機能します。中央をグループ化します。

/^([a-z]|[\w.-]{4,19})$/i

…ただし、あなたの説明によれば、そんなつもりはなかったのですか? 次のようになります。

/^[a-z][\w.-]{4,19}$/i
于 2013-02-12T04:48:01.843 に答える
0

試す:

console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('test'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('1testing'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('testing'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('micky^'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('ppppppp§°'));
console.log(/^[a-z][a-z0-9_.-]{4,19}$/i.test('micky12-22'));

http://jsfiddle.net/z5x6k/1/

于 2013-02-12T04:48:01.137 に答える
0

これを試して:

 var returncode = true; 
 var userinput = $('#username').val(); 
 var pattern = new RegExp(/^[a-z][a-z0-9_.-]{4,19}$/); 

 if(!pattern.test(userinput)) {    
      returncode = false;
 }

どこ

^[a-z][a-z0-9_.-]{4,19}$
   |        |________________Letters, numbers, dot and dash in remaining 
   |
Letter as start

それは確かに機能します。

于 2013-02-12T04:50:47.293 に答える