Регулярное выражение может разрешать только указанные символы

#.net #regex

#.net #регулярное выражение

Вопрос:

  • Элемент списка

Я использую следующее регулярное выражение для проверки строки ^[a-zA-Z0-9-/]*

     private static void ValidateActualValue(string value)
    {
        if (String.IsNullOrEmpty(value)) throw new ArgumentNullException("value");
        if (Regex.IsMatch(value, (@"^[a-zA-Z0-9-/]*")))
        {
            throw new InvalidBarcodeException(value);
        }
    }
  

Следующая строка должна быть разрешена string correctBarcodeString = «1-234567890 /A»;
Однако по-прежнему возникает исключение.

Допустимые значения должны быть:

  • 1234234545689889097
  • A-adf90923409/1234
  • Ааааааааааа
  • BC-9876655788
  • BC-345 / q3435/wqer
  • ABC-/BCD
  • и т.д.

Ответ №1:

Поместите - символ в конец класса или экранируйте его.

[a-zA-Z0-9/-] или [a-zA-Z0-9-/]

Ответ №2:

Внутри группы символов - должно быть в начале или в конце, в противном случае оно должно быть экранировано.

Поэтому измените его на

 "^[a-zA-Z0-9/-]*"
  

Редактировать:

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

 "^[a-zA-Z0-9/-]*$"
  

если вы хотите избежать сопоставления с пустой строкой, используйте вместо * . Или, если вы знаете допустимый диапазон Min / Max для используемой длины {4,20} , если минимальное количество символов равно 4, а максимальное — 20.

Комментарии:

1. это соответствует истине для всех приведенных выше примеров.

Ответ №3:

Я то, что вы действительно хотите;

 @"^[w/-] "
  

Использование вместо * также будет охватывать пустую строку. w = все цифры буквы

Комментарии:

1. w соответствует также подчеркиванию _

Ответ №4:

Изменить

 @"^[a-zA-Z0-9-/]*"
  

Для

 @"^[a-zA-Z0-9/]*"
  

У вас есть дополнительный дефис после 9.

Комментарии:

1. Я думаю, он хотел, чтобы ‘-‘ также учитывалось.