英数字、ダッシュ、アンダースコア、スペースなし正規表現チェックJavaScript


92

正規表現に対して入力をチェックしようとしています。

このフィールドでは、英数字、ダッシュ、アンダースコアのみを使用でき、スペースは使用できません。

ただし、以下のコードではスペースを使用できます。

何が足りないのですか?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
私は以下のAndyEの答えが好きです。また、正規表現をすばやく編集するには、gskinner.com / RegExrをチェックアウトすることをお勧めします。それは...かなり甘いです。
pixelbobby 2011年

回答:


155

ただし、以下のコードではスペースを使用できます。

いいえ、そうではありません。ただし、長さが1の入力でのみ一致します。長さが1以上の入力の場合、+次の文字クラスが必要です。

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

-(この場合)も_エスケープする必要もないことに注意してください。


16

ブール値のみに関心がある場合は、String.matchを使用するのでは/abc/.test("abcd")なく、String.search()の代わりにRegExp.prototype.test(つまり)を使用する必要があります。Andy Eの回答で説明されているように、キャラクタークラスを繰り返す必要もあります。

var regexp = /^[a-zA-Z0-9-_]+$/;

8
実際、RegExp.prototype.testブール値のみに関心がある場合は、この方法を使用する必要があります。
アンディE

7

この構文は、これまでに投稿された回答よりも少し簡潔で、同じ結果を達成します。

let regex = /^[\w-]+$/;

1
あなたの答えは国際的なキャラクターにも有効であるというメモを追加することを検討してください。JavaScriptではわかりませんが、bashでは次のように機能します。ʻecho "abc-defdäf_ghi" | egrep -wo '(\ w |-| _)+'
Ivan Ogai

4

愚かなエラーが発生しました。誰かがそれが役に立つと思うなら、ここに投稿してください

  1. -\._ -ハイフン、ドット、アンダースコアを意味します
  2. \.-_ -ドットからアンダースコアまでの範囲のすべての記号を意味します

#2は、角かっこで囲まれている場合にのみ適用されます。つまり、[\ .-_]はドットからアンダースコアまでの範囲の文字です。ただし、角かっこがないと、どちらも3つの記号のシーケンスであり、順序が異なるだけです。
エリクト

1

アンダースコアをエスケープしないでください。多少の打撃を引き起こしている可能性があります。


1
なんでそんなこと言うの?アンダースコアをエスケープする必要がないことは知っていますが\_、JavaScriptやその他の正規表現フレーバーで問題が発生することは聞いたことがありません。
アランムーア

1
純粋な憶測。それ以外の場合、式はうまく見え、どのような場合でもスペースと一致するべきではありませんが、私はそれをそこに投げました。おそらく、答えではなくコメントであるべきです。
David Fells

1

これを試して

"[A-Za-z0-9_-]+"

アンダースコアとハイフンを許可する必要があります


あなたの解決策は私を助けました。ありがとう!
サイヤ人王子

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.