У меня есть следующий валидатор регулярных выражений, чтобы определить, содержит ли входная строка теги HTML / script и, если это так, вызвать ошибку проверки:
<asp:TextBox ID="txt" runat="server" />
<asp:RegularExpressionValidator
ControlToValidate="txt"
runat="server"
ID="regexVal"
EnableClientScript="true" Display="Dynamic"
ErrorMessage="Invalid Content"
Text="!"
ValidationExpression=">(?:(?<t>[^<]*))" />
Когда я запускаю страницу с этой разметкой, я получаю сообщение об ошибке с сообщением «Ошибка синтаксиса в регулярном выражении».
Однако, когда я беру тот же regex и запускаю его, используя класс Regex из System.Text.RegularExpressions, все работает нормально:
Вот так:
Regex r = new Regex(">(?:(?<t>[^<]*))");
r.IsMatch(@"<b>This should cause a validation error</b>");
r.IsMatch("this is fine");
Чего мне не хватает
UPDATE:
Кажется, ошибка происходит в следующей функции js в WebResource.axd:
function RegularExpressionValidatorEvaluateIsValid(val) {
var value = ValidatorGetValue(val.controltovalidate);
if (ValidatorTrim(value).length == 0)
return true;
var rx = new RegExp(val.validationexpression); //this is the line causing the error
var matches = rx.exec(value);
return (matches != null && value == matches[0]);
}