#c# #.net #regex
#c# #.net #регулярное выражение
Вопрос:
У меня есть регулярное выражение в моей программе перед вставкой в базу данных, которое останавливает прохождение определенных символов. Мне нужно изменить его, чтобы также остановить не-ASCII.
Существующее регулярное выражение является:
Regex.IsMatch(fieldValue, @"^[p{L}p{M}' .-] $")
Комментарии:
1. Если вы «остановите Юникод», у вас вообще не останется символов. Чего вы на самом деле хотите?
Ответ №1:
Вы могли бы игнорировать диапазон символов выше ASCII
[^\u007f-\uffff]
Комментарии:
1. Это будет соответствовать нескольким байтам для объединения символов. На практике вы хотели бы сохранить не объединенную часть (т. Е. символ ascii без диакритических знаков) или иметь возможность заменить ‘запрещенный’ символ на один символ замены, а не потенциально несколько символов замены в строке. У вас есть идеи о том, как добиться такого поведения?
2. Действительно. Я этого не учел. Возможно, вы могли бы использовать класс ASCIIEncoding? редактировать: или использовать System. Глобализация. TextElementEnumerator для разделения символов, отличных от ASCII.
3. Я уже реализовал метод, который удаляет диакритические знаки, я просто хочу вернуть false, если он содержит что-либо за пределами Ascii
4. В этом случае я добавлю 1 к этому ответу, потому что я думаю, что это соответствует цели
5. Тогда это выходит за рамки моих знаний о регулярных выражениях. Возможно, вы могли бы просто искать их вручную, используя TextElementEnumerator.
Ответ №2:
if (!Regex.IsMatch(fieldValue, "[^x20-x7E]"))
return fieldValue;
else
{
return null;
}