Регулярное выражение для строки альфа-номера в c #, принимая подчеркивание и пробелы - PullRequest
0 голосов
/ 13 сентября 2018

Я уже прошел много постов на SO .Я не нашел то, что мне нужно для моего конкретного сценария.

Мне нужно регулярное выражение для буквенно-цифровой строки.где должны быть соблюдены следующие условия

Допустимая строка:

ameya123 (alphabets and numbers)
ameya (only alphabets)
AMeya12(Capital and normal alphabets and numbers)
Ameya_123 (alphabets and underscore and numbers)
Ameya_   123 (alphabets underscore and white speces)

Недопустимая строка:

123 (only numbers)
_ (only underscore)
(only space) (only white spaces)
any special charecter other than underscore

что я пытался до сих пор:

(?=.*[a-zA-Z])(?=.*[0-9]*[\s]*[_]*)

приведенное выше регулярное выражение работает в онлайн-редакторе регулярных выражений однако не работает в аннотации данных в c #

, пожалуйста, предложите.

Ответы [ 5 ]

0 голосов
/ 13 сентября 2018

Одна проблема с вашим регулярным выражением состоит в том, что в аннотациях регулярное выражение должно совпадать и потребляет весь ввод строки, в то время как ваш шаблон содержит только обходные пути, которые не потребляют никакого текста.

Вы можете использовать

^(?!\d+$)(?![_\s]+$)[A-Za-z0-9\s_]+$

См. Демоверсию regex . Обратите внимание, что \w (когда используется для проверки на стороне сервера и, следовательно, анализируется с помощью механизма регулярных выражений .NET), также разрешает любые буквы, цифры и некоторые другие Unicode при проверке на стороне сервера, поэтому я бы предпочел придерживаться на [A-Za-z0-9_], чтобы соответствовать как на стороне сервера, так и на стороне клиента.

Детали

  • ^ - начало строки (здесь не обязательно, но полезно при отладке)
  • (?!\d+$) - отрицательный прогноз, который не соответствует, если вся строка состоит из цифр
  • (?![_\s]+$) - отрицательный прогноз, который не совпадает, если вся строка состоит из символов подчеркивания и / или пробелов. ПРИМЕЧАНИЕ : если вы планируете запретить только ____ или " " подобные вводы, вам нужно разделить этот прогноз на (?!_+$) и (?!\s+$))
  • [A-Za-z0-9\s_]+ - 1+ букв ASCII, цифры, _ и пробельные символы
  • $ - конец строки (здесь не обязательно, но все же полезно иметь).
0 голосов
/ 13 сентября 2018

В зависимости от ваших требований, а не от ваших попыток, вам нужно следующее:

^(?!(?:\d+|_+| +)$)[\w ]+$

Негативный прогноз ищет нежелательные совпадения, чтобы провалить весь процесс.Это строки, содержащие только цифры, только подчеркивания или только пробелы.Если они никогда не произойдут, мы хотим найти совпадение для ^[\w ]+$, которое почти совпадает с ^[a-zA-Z0-9_ ]+$.

Смотрите живую демонстрацию здесь

Объяснение:

  • ^ Начало строки / строки
  • (?! Начало негативного прогноза
    • (?: Начало группы без захвата
      • \d+ Соответствующие цифры
      • | Или
      • _+ Соответствующие подчеркивания
      • | Или
      • [ ]+Пробелы
    • )$ Конец группы без захвата, за которой сразу следует конец строки / строки ( Ни одно из предыдущих совпадений не должно быть найдено )
  • ) Конец отрицательного прогноза
  • [\w ]+$ Соответствует символу внутри набора символов до конца входной строки

Примечание: \w является сокращением для [a-zA-Z0-9_], если не установлен модификатор u.

0 голосов
/ 13 сентября 2018

Этот простой RegEx должен сделать это:

[a-zA-Z]+[0-9_ ]*

Один или несколько алфавитов, за которыми следуют ноль или более цифр, подчеркивание и пробел.

0 голосов
/ 13 сентября 2018

Это должно быть хорошо:

[\w\s_]*[a-zA-Z]+[\w\s_]*
0 голосов
/ 13 сентября 2018

Если я правильно понимаю ваши требования, вам нужно сопоставить одну или несколько букв (прописные или строчные) и, возможно, ноль или более цифр, пробелов или подчеркиваний.Это подразумевает следующий шаблон:

^[A-Za-z0-9\s_]*[A-Za-z][A-Za-z0-9\s_]*$

Демо

В демоверсии я заменил \s на \t \r, потому что\s совпадает по всем строкам.

В отличие от ответов, данных @revo и @wiktor, у меня нет причудливого объяснения регулярному выражению.Я прекрасна даже без моего макияжа.Честно говоря, если вы не понимаете шаблон, который я дал, вы можете просмотреть хороший учебник по регулярным выражениям.

...