REGEX - Соответствует специальному символу в любом месте строки - PullRequest
5 голосов
/ 22 февраля 2012

Я не парень из регулярных выражений, поэтому мне нужна небольшая помощь, я просто не могу разобраться с этим ...

Я пишу страницу регистрации и использую валидаторы asp.net.Мне нужен валидатор регулярных выражений для сопоставления со специальным символом в любом месте слова, поэтому он будет удовлетворять требованию, согласно которому «идентификатор должен содержать хотя бы один специальный символ».Допустимые символы:"# $% & '() * +, -. /:; <=>? @ [\] ^ _` {|} ~

Еще раз, я младший, и у меня проблемы с переносомЯ сейчас обдумываю эти вещи ...

Пока у меня есть

[\[\]\^\$\.\|\?\*\+\(\)\\~`!@#%&-_+={}'""<>:;, ]{1,}

, но по некоторым причинам он тоже совпадает с числами, а иногда не совпадает с символами в началеслова ...

Так что, пожалуйста, если кто-нибудь может мне помочь с этим ...

Ответы [ 5 ]

5 голосов
/ 22 февраля 2012

Вам нужно убежать '-' и '!'

[\[\]\^\$\.\|\?\*\+\(\)\\~`\!@#%&\-_+={}'""<>:;, ]{1,}
3 голосов
/ 22 февраля 2012

Было бы проще сделать наоборот

^[0-9]|[a-z]|[A-Z]$

у него есть специальный символ, если он не соответствует

1 голос
/ 22 февраля 2012

Не asp.net или эксперт по валидации.Но классам символов нужны только определенные символы, например [].Тире - представляет диапазон символов.При использовании в качестве литерала его можно экранировать и помещать в любое место, а также в начало или конец класса ([-aa] или [aa-]) и рассматривать как литерал.Кроме того, знак вставки в начале класса обозначает «отрицательное» значение класса, любые символы, кроме этих ([^not me]).

В классах могут быть другие конструкции со специальным синтаксисом, уникальным для конкретного механизма(.NET может быть так, я не уверен).Некоторые последовательности тоже вызывают подкласс.

Вот мои тесты с валидатором asp.net с использованием ваших специальных символов.Они могут быть относительными, я не уверен.Кажется, что оба не проверяют пустой ввод, это не может быть регулярным выражением.

    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
        ControlToValidate="TextBox1" ErrorMessage="Input is not valid." 
        ValidationExpression="^.*[\[\]^$.|?*+()\\~`!@#%&\-_+={}'&quot;&lt;&gt;:;,\ ].*$"></asp:RegularExpressionValidator>
    <asp:Button ID="Button1" runat="server" Text="Button" />

Похоже, что этот вопрос решает проблему безопасности, если таковая имеется.Обратите внимание на <+'alpha char', где «альфа» относится к диапазону допустимых символов Юникода в соответствии с некоторыми стандартами, которые я считаю.

    <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" 
        ControlToValidate="TextBox1" ErrorMessage="Input is not valid." 
        ValidationExpression="^(?!.*&lt;(?:/|[A-Za-z_:])).*[\[\]^$.|?*+()\\~`!@#%&\-_+={}'&quot;&lt;&gt;:;,\ ].*$"></asp:RegularExpressionValidator>
    <asp:Button ID="Button1" runat="server" Text="Button" />

Просто не обращайте внимания, если это слишком далеко.

0 голосов
/ 28 декабря 2016

Вы можете немного обрезать это и сопоставить диапазоны символов.Например, это соответствует всем специальным (и печатным) символам (включая юникод):

[^\p{L}]

Полагаю, если вам нужно совпадать с 1 или более, что характерно для вашего случая, то это будет работать какхорошо (Обратите внимание, что оператор регулярного выражения + является сокращением для {1,}

[^\p{L}]+
0 голосов
/ 22 февраля 2012

Вы можете узнать больше о регулярных выражениях здесь: http://regex.learncodethehardway.org/

это не так сложно сделать;

удачи;

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