2016-08-18 2 views
1

Возможно ли извлечь максимальную длину разрешенной строки из шаблона регулярного выражения после ее загрузки в объект C# Regex?Extract Max Длина допустимой строки из объекта Regex

Если у меня есть строка регулярных выражений, определенная как @"^[A-Z0-9]{0,20}$", я мог бы использовать строковые манипуляции, чтобы получить максимально допустимую длину 20.

Однако есть способ, я могу получить, что более легко, например, с помощью Regex объекта следующим образом:

var r = new Regex(@"^[A-Z0-9]{0,20}$"); 
// var max = r.MaxLength; 

Update

Чтобы установить некоторый контекст, у меня есть Asp.Net MVC 5, в котором мы используем RegexValidationAttribute, чтобы обеспечить входную проверку наших моделей.

Что я хотел бы сделать, это переопределить этот атрибут, чтобы я мог добавить свойство Custom metadata, которое содержит максимально допустимую длину строки, проанализированную из строки регулярного выражения. В моем редакторе шаблонов строк я возьму значение пользовательского метаданных и добавлю атрибут maxlength="" к тегу html <input>. Теперь я знаю, что могу просто добавить StringLengthAttribute и сделать это таким образом, но тогда я должен помнить, чтобы сохранить длину регулярного выражения и длину строки в синхронизации. И с более чем 1000+ моделей я хочу снять дубликаты требуемых усилий.

+0

Используйте другое регулярное выражение для анализа предыдущего. – revo

+0

Можете ли вы привести пример? – Nick

+0

нет свойства, о котором я знаю, где вы могли бы прочитать, как долго может быть строка, и я также предполагаю, что она также не реализована. вы можете сделать это, сопоставить его со своей строкой и выдать количество совпадающих символов, если вы уверены, что существует предел - и есть совпадение. проблема заключается в том, что вы можете иметь столько символов, сколько хотите в шаблоне регулярных выражений, поэтому у вас просто не один фактический предел - то, что означает revo, - это проанализировать 20 из вашего регулярного выражения с другим регулярным выражением – prizm1

ответ

0

Возможно ли извлечь максимальную длину разрешенной строки из шаблона регулярного выражения после ее загрузки в объект C# Regex?

Regex class нет встроенного поля/способ, который выполняет свою работу.

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