2011-10-24 6 views
2

文字列に含まれる文字、数字、スペース、および記号セット(!-?():&,;+)の文字のみが含まれていることを検証しようとしています。ここで私はこれまで持っているものです。許可された文字以上の正規表現

/^[a-zA-Z0-9 !-?\(\):&,;\+]+$/ 

は今、これはやや動作しますが、それは同様に他の文字を受け入れます。たとえば、*または#を含む文字列が検証されます。私は、式の冒頭に^があり、最後に$が文字列全体と一致すると考えました。私は間違って何をしていますか?

ありがとうございました。

+0

一見、これはうまくいくはずです。残りのコードに何か問題が起こっている可能性はありますか?あなたはそれのいくつかを投稿できますか? – lampej

答えて

4
/^[a-zA-Z0-9 !-?\(\):&,;\+]+$/ 

- あなたが配置した場所はうれしくない!文字クラスの中に配置する場合は、の最初のまたはの最後のなどの文字クラスに配置する必要があります。

/^[a-zA-Z0-9 !?\(\):&,;\+-]+$/ 

それ以外の場合は、まで?この範囲は多分...あなたの正規表現のマシンによって異なります。

最後に、特殊文字は特殊な文字クラスではありません。だから、それらのほとんどをエスケープする必要:

/^[a-zA-Z0-9 !?():&,;+-]+$/ 
+0

ありがとうございました! – birderic

+1

良いキャッチ - 私はそれを右に見えた! – lampej

+0

あなたはただ文字クラスの中でエスケープすることができます –

2

あなたは文字クラス内 "範囲" を指定していない:

[!-?] 

!?
http://www.regular-expressions.info/charclass.html

間のすべてのASCII記号を意味しますあなたは\バックスラッシュでマイナス-をエスケープする必要があります。 (文字列内の+()の前にバックスラッシュが冗長です)

+1

または、最後の文字または最初の文字として置くことができます。 – FailedDev

+0

リンク先ページに記載されています。 – mario

関連する問題