RegularExpressionValidator для больше, чем просто AlphaNumerics - PullRequest
1 голос
/ 29 ноября 2010

У меня есть RegularExpressionValidator с:

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

так что это работало для буквенно-цифровых символов, пробелов, апострофов и дефисов.

Мне сказали, что теперь мне нужно, чтобы он дополнительно работал с подчеркиванием, амперсандом и '&', запятой, скобками и полной точкой.

Я пытался:

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

но это заставило его принять практически все.

Может кто-нибудь сказать мне, где я иду не так? Я относительно новичок в Regex.

Ответы [ 4 ]

2 голосов
/ 29 ноября 2010

Точка означает «что угодно» (кроме, в зависимости от ваших настроек, возврат строки).Вы должны экранировать его обратной косой чертой, если вы хотите сопоставить символ точки:

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

Возможно, вам также понадобится экранировать скобки и скобки, поскольку они также являются метасимволами.

1 голос
/ 30 ноября 2010

будьте осторожны при использовании. в регулярных выражениях это специальный символ, который соответствует любому символу. Возможно, вы захотите избежать этого следующим образом: \. или иметь его внутри класса символов, например [.]. Позаботьтесь и о любых других специальных символах.

Вы можете найти много интересной информации о точке здесь , убедитесь, что вы проверили остальные ссылки на этом сайте, они помогут вам понять, как работают регулярные выражения!

Надеюсь, это поможет.

0 голосов
/ 30 ноября 2010

Пожалуйста, посмотрите здесь и здесь о том, как вы должны писать вещи, которые означают буквенно-цифровые символы, пробелы (возможно, только горизонтальные, а не вертикальные), тире и апострофы, чтобы он работал правильно Данные Unicode.

Код существует на 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}]]))";

Удивительно, но верно.

0 голосов
/ 30 ноября 2010

попробуйте это. вставьте отверстие [ и переместите - в конец.

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

Кстати: . не имеет конкретной ссылки в символьных классах и не делает ничего, кроме самого разделителя регулярных выражений вашего языка из самого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...