2014-02-18 3 views
2

Возможно ли использовать только регулярное выражение, чтобы ограничить количество вхождений определенных символов в строке?Регулярное выражение для ограничения числа вхождений определенного символа в строке

Например, я хочу ограничить количество вхождений $ или % или space в строке до 5 входов макс.

Возможно ли это?

+1

Regex - соответствие шаблону. Поэтому вы можете легко определить, есть ли в строке более 5 '' ', но я не уверен, что вы подразумеваете, ограничивая случаи. – paqogomez

+0

@paqogomez Количество этих отдельных символов в строке не должно превышать 5 –

ответ

3

попробуйте это выражение. В этом случае характер вы ограничиваете является A

/^([^A]*A[^A]*){0,5}$/

http://rubular.com/r/X5iz5dHzgs

3

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

  1. Как проверить, если некоторые ограничение (как, например, если число вхождений символов $ не превышает 5)
  2. Как форсировать e что ограничение

Чтобы решить проблему 1., вы можете, конечно, использовать Regex. Регулярное выражение \d{6,}, например, может проверить, есть ли 6 или более цифр.

Чтобы решить проблему 2., C# не имеет общего метода для этого. Проще говоря, должно быть что-то, что вынуждает ограничения. Самый простой способ создать класс со свойствами, который проверяет ограничения на установки (так что это свойство, которое вынуждает ограничение):

public class SomeTestClass 
{ 
    private string text; 
    public string Text 
    { 
     get 
     { 
      return text; 
     } 
     set 
     { 
      CheckConstraints(value, "Text"); 
      text = value; 
     } 
    } 

    private void CheckConstraints(string value, string param) 
    { 
     if (Regex.IsMatch(value, @"\d{6,}")) 
     { 
      throw new ArgumentException("Argument do not match the constraint", param); 
     } 
    } 
} 

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

Если есть другой объект, который управляет вашим классом - например, некоторый поставщикданных, который управляет объектами данных, вы можете использовать приписаны подход.

Смежные вопросы