Неверное регулярное выражение маски Devexpress TextEdit

Я применяю приведенную ниже настройку маски к элементу управления Devexpress TextEdit, но при выполнении выдает синтаксическую ошибку.

textEdit1.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.RegEx;
textEdit1.Properties.Mask.EditMask = "(100(?:\\.0{1,3})?|0*?\\.\\d{1,3}|\\d{1,2}(?:\\.\\d{1,3})?)%";

Концепция использования этого регулярного выражения заключается в вводе значения от 0 до 100 процентов с 3 необязательными десятичными знаками.

например 25, 25.5, 60, 60.369, 99 but 101, 10.2569 - недопустимые значения.

Подскажите, пожалуйста, как исправить это выражение.


person user2310344    schedule 23.04.2013    source источник
comment
Поскольку я не смог найти его в документе, вы уверены, что ленивые операторы поддерживаются? Кроме того, похоже, что в документе нет двойного выхода, но это не приведет к синтаксической ошибке.   -  person Loamhoof    schedule 23.04.2013
comment
См. TextEdit EditMask RegEx   -  person Niranjan Singh    schedule 23.04.2013


Ответы (1)


Попробуйте следующее (у меня нет доступа к devexpress, поэтому я не могу полностью протестировать):

(100(\R.0{1,3})?)|((\d{1,2}(\R.\d{1,3})?))

Он состоит из двух чередующихся частей, разделенных знаком «|», первая часть проверяет 100 с тремя десятичными нулями (100, 100,0, 100,00, 100,000).

Вторая часть имеет дело с числами с одной или двумя цифрами перед запятой и, возможно, с десятичной запятой и до трех цифр после (25, 25,5, 60, 60,369, 99).

\R. на самом деле соответствует десятичному разделителю, указанному в свойстве System.Globalization.NumberFormatInfo.NumberDecimalSeparator текущего языка и региональных параметров согласно документации. Если вы просто хотите получить десятичную дробь независимо от того, вы можете изменить \R. на \.

person Ian Kenney    schedule 23.04.2013