Учитывая это регулярное выражение: "^[0-9]*\s*(lbs|kg|kgs)$"
, как сделать его регистрозависимым? Я пытаюсь использовать это в валидаторе регулярных выражений .net, поэтому мне нужно указать нечувствительность к регистру в шаблоне.
Я не могу использовать RegexOptions программно, потому что я задаю регулярное выражение в RegularExpressionValidator
Ответ 1
Я узнал.
С учетом регистра: ^[0-9]\s(lbs|kg|kgs)$
Нечувствительность к регистру: (?i:^[0-9]\s(lbs|kg|kgs)$)
Я считаю, что это относится к реализации регулярных выражений .NET. Поэтому, если вы используете это в RegularExpressionValidator, вы должны отключить проверку на стороне клиента, потому что парсер javascript regex не распознает токен ?i
.
Ответ 2
Используйте RegEx Options.
Regex regExInsensitive = new Regex(@"^[0-9]\s(lbs|kg|kgs)$", RegexOptions.IgnoreCase);
В других языках вы можете обычно указывать модификатор RegEx после окончания Reg Ex; модификатор "нечувствительный к регистру" - "i":
В Perl:
if($var =~ /^[0-9]\s(lbs|kg|kgs)$/i) { # the /i means case insensitive
# ...
}
В PHP:
if(preg_match("/^[0-9]\s(lbs|kg|kgs)$/i", $var)) {
// ...
}
Ответ 3
Я знаю, что это было дано давно, и это лучший набор ответов среди других повторяющихся вопросов. Вот альтернатива, использующая CustomValidator, когда на самом деле нужна нечувствительность к регистру на стороне сервера и на стороне клиента; и подход верхнего/нижнего [A-Za-z] char слишком велик.
Это смешивает различные другие ответы, используя серверный объект RegEx и синтаксис javascript на стороне клиента.
CustomValidator:
<asp:CustomValidator ID="cvWeight" runat="server" ControlToValidate="txtWeight"
OnServerValidate="cvWeight_Validate" ClientValidationFunction="cvWeight_Validate"
ValidateEmptyText="true" Text="*" ErrorMessage="Invalid entry." />
Код позади:
protected void cvWeight_Validate(object sender, ServerValidateEventArgs args)
{
Regex re = new Regex(@"^[0-9]*\s*(lbs|kg|kgs)$", RegexOptions.IgnoreCase);
args.IsValid = re.IsMatch(args.Value);
}
Функция проверки на стороне клиента:
function cvWeight_Validate(sender, args) {
var reWeight = /^[0-9]*\s*(lbs|kg|kgs)$/i;
args.IsValid = reWeight.test(args);
}
Это отлично работает для меня, за исключением случаев использования ValidationSummary. При проверке на стороне клиента отображается ошибка *
, но я не могу получить сообщение об ошибке для отображения в сводке. Сводка отображается только при отправке. Я думаю, что он должен отображаться; У меня есть сочетание панелей обновлений и старого кода, которые могут быть проблемы.
Ответ 4
Проще всего просто изменить регулярное выражение на
^[0-9]*\s*([lL][bB][sS]|[kK][gG][sS]?)$
Ужасно читать, но все будет хорошо.