0

次の条件を満たす必要があるテキスト ボックスのいくつかを確認したいと思います: アルファベットは az (大文字と小文字) の数字 0 ~ 9 で、特殊文字は ~`!@#$%^&*()- です。 _+={}[];:'",.<>/?

  1. アルファベットのみを含めることができます
  2. 数字だけを含めることはできません
  3. 特殊文字のみを含めることはできません
  4. 数字と特殊文字のみを含めることはできません
  5. アルファベット、数字、特殊文字を含めることができます
  6. アルファベットと数字を含めることができます
  7. アルファベットと特殊文字を含めることができます

解決策を見つけましたが、うまくいかないようです:

/^[a-z0-9/. -!@#$%^&*(){}:;"',/?]+$/i

私は次のようにチェックしています:

var alpha=/^[a-z0-9/. -!@#$%^&*(){}:;"',/?]+$/i;
if (!alpha.test(username.value))
{
    alert('Invalid username');
    document.theForm.username.focus();
    return false;
}
4

2 に答える 2

2

問題は、文字のみを含む文字列を照合する問題として言い換えることができます

A-Za-z0-9~`!@#$%^&*()-_+={}[];:'",.<>/?

それらの少なくとも1つが文字であるように。

幸いなことに、U+0021 から U+007F までの範囲のすべての印刷可能な文字をカバーしているので、目的の正規表現は単純です。

[!-~]*[A-Za-z][!-~]*

編集:よく読んで、バックスラッシュを許可していないことに気付きました! バックスラッシュを許可したい場合は、上記の正規表現で問題ありません。そうでない場合は、次のように変更する必要があります。

[!-\[\]-~]*[A-Za-z][!-\[\]-~]*

バックスラッシュを除外する必要があるため、少し醜いです。

  • からまでの範囲内の文字![結合する範囲内のすべての文字、および と を明示的に言及するには、.]~[]\

\上記のより単純な正規表現を使用できるように、を許可するつもりだったと思います。

編集2

正規表現をより効率的にするには、消極的な量指定子を使用する必要があります (kcsoft が行ったように):

[!-~]*?[A-Za-z][!-~]*

を使用している場合は Java ではなく JavaScript の場合も、JavaScript でmatchesこれを指定して、文字列全体に一致するように正規表現を固定する必要があります。

/^[!-~]*?[A-Za-z][!-~]*$/

iそして、質問で行ったように、修飾子を使用してもう少し短くすることができます。

/^[!-~]*?[A-Z][!-~]*$/i
于 2013-06-20T05:57:03.357 に答える
0

入力例を教えてください。これを試すことができますか?

/.*?[a-zA-Z]+.*/

または、特殊文字のリストを指定する必要がある場合:

/[list of chars]*?[a-zA-Z]+[list of chars]*/
于 2013-06-20T05:50:13.760 に答える