2010-11-29 25 views
1

私はとRegularExpressionValidatorを持っている: RegularExpressionValidatorはちょうど英数字

ValidationExpression="^(a-zA-Z0-9 '-]+$" 

ので、これは、英数字、スペース、アポストロフィとハイフンのために働いていました。

アンダースコア、アンパサンド '&'、カンマ、カッコ、フルストップを追加する必要があると言われました。

私が試した:

ValidationExpression="^(a-zA-Z0-9 '-_&,().]+$" 

をしかし、これは事実上何でも受け入れました。

誰かが間違っている場所を教えてください。私はRegexに比較的新しいです。

+2

なぜ^( '?['? – PleaseStand

+0

を探してください。\で始まるドットまたは角括弧のような正規表現要素をエスケープするのはちょっとしたことです。 – Leonidas

答えて

2

ドットは「何でも」を意味します(ただし、設定に応じて、改行が返されます)。

ValidationExpression="^(a-zA-Z0-9 '-_&,()\.]+$" 

、彼らはまた、メタ文字であるため、おそらくまた、括弧と括弧をエスケープする必要があります:あなたは、ドット文字を一致させたい場合は、バックスラッシュでエスケープしなければなりません。

0

これを試してください。開口部[を入れ、-を最後まで移動します。

^[a-zA-Z0-9 '_&,().-]+$

ところで:.は、文字クラスには具体的な言及がありませんどちらもコード自体から言語の正規表現表現区切りから最もわきません。

1

を使用する場合は注意してください。正規表現では、それは特殊文字であり、任意の文字と一致します。あなたはこれを\.のようにエスケープしたり、[.]のような文字クラスの中に入れたいかもしれません。他の特殊文字も大事にしてください。

ドットhereに関する興味深い情報がたくさんあります。そのサイトの残りのリンクを確認して、正規表現の仕組みをよく理解できます。

これが役に立ちます。

0

英数字、空白(おそらく水平ではない)、ダッシュ、アポストロフィを意味するものをUnicodeデータで正しく記述するためには、herehereを見てください。

コードはJavaにありますが、C♯にも同じルールと制限が適用されることは間違いありません。短い記事では、これをJavaで書く必要があるということです:

dashes     = "[\\u002D\\u058A\\u05BE\\u1400\\u1806\\u2010\\u2011\\u2012\\u2013\\u2014\\u2015\\u2053\\u207B\\u208B\\u2212\\u2E17\\u2E1A\\u301C\\u3030\\u30A0\\uFE31\\uFE32\\uFE58\\uFE63\\uFF0D]"; 
horizontal_whitespaces = "[\\u0009\\u0020\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000]"; 
vertical_whitespace  = "[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]"; 
whitespace    = "[\\u000A\\u000B\\u000C\\u000D\\u0020\\u0085\\u00A0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]"; 
identifier_chars  = "[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]"; 
apostrophic_chars  = "[\\u0027\\u02BC\\u2019\\uFF07]"; 
quotation_mark_chars = "[\\u0022\\u0027\\u00AB\\u00BB\\u2018\\u2019\\u201A\\u201B\\u201C\\u201D\\u201E\\u201F\\u2039\\u203A\\u300C\\u300D\\u300E\\u300F\\u301D\\u301E\\u301F\\uFE41\\uFE42\\uFE43\\uFE44\\uFF02\\uFF07\\uFF62\\uFF63]"; 
leading_punctuation  = "[\\p{Ps}\\p{Pi}]"; 
closing_punctuation  = "[\\p{Pe}\\p{Pf}]"; 
boundary    = "(?:(?<=[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]])(?![\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]])|(?<![\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]])(?=[\\pL\\pM\\p{Nd}\\p{Nl}\\p{Pc}[\\p{InEnclosedAlphanumerics}&&\\p{So}]]))"; 

驚くべきですが、本当です。

関連する問題