Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как правильно написать регулярное выражение

4.0K
18 августа 2006 года
vesna
71 / / 04.10.2005
Вот такой вопрос у меня.
В TextBox'е должна быть строка. Она не должна начинаться с пробела(ов) и в ней не должно быть кавычек, апострофов. А лучше и вообще никаких символов типа {}, [] и т.п.
Я регулярными выражениями никогда серьёзно не занимался, я сейчас просто нет времени разбираться.
Так, что пока могу написать только что-то вроде "\S+D{2,50}"

Подскаже, может, кто-нибудь?
273
20 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=vesna]Вот такой вопрос у меня.
В TextBox'е должна быть строка. Она не должна начинаться с пробела(ов) и в ней не должно быть кавычек, апострофов. А лучше и вообще никаких символов типа {}, [] и т.п.
Я регулярными выражениями никогда серьёзно не занимался, я сейчас просто нет времени разбираться.
Так, что пока могу написать только что-то вроде "\S+D{2,50}"

Подскаже, может, кто-нибудь?[/quote]
Дело в том, что написать стргий валидатор не получится, и следующий код выдасть совпадение:
Код:
[SIZE=2][COLOR=#0000ff][FONT=Courier New]static [/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] Main([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New][] args)[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080] Console[/COLOR][/SIZE][SIZE=2].WriteLine(ValidateString([/SIZE][SIZE=2][COLOR=#800000]"_abc"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]));[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080] Console[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New].ReadKey();[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2] ValidateString([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] str)[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080] Regex[/COLOR][/SIZE][SIZE=2] expr = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#008080]Regex[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#800000]"[a-zA-Z]+"[/COLOR][/SIZE][SIZE=2]); [/SIZE][SIZE=2][COLOR=#008000]
[/COLOR][/SIZE][/FONT][FONT=Courier New][SIZE=2][COLOR=#0000ff] return[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] expr.Match(str).Value;[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE]

Можно создать регулярное выражение, которое бы проверяло наличие запрещённых символов. В твоём случае должно быть что-то вроде:
 
Код:
[FONT=Courier New][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]bool[/COLOR][/SIZE][SIZE=2] ValidateString([/SIZE][SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] str)[/FONT]
[FONT=Courier New]{[/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#008080] Regex[/COLOR][/SIZE][SIZE=2] expr = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#008080]Regex[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#800000]"([a-zA-Z]*[0-9]*)+"[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New]); [/FONT]
[/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff] return[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New] expr.IsMatch(str);[/FONT]
[FONT=Courier New]}[/FONT]
[/SIZE]

Но я бы порекомендовал (с точки зрения быстродействия) сканировать строку вручную и проверять каждый символ на несоответствие.
4.0K
20 августа 2006 года
vesna
71 / / 04.10.2005
Спасибо за ответ.
Пока я так и делаю. Из строки, введенной в текстбокс просто удаляю всё ненужное. Просто мне кажется, использовать валидаторы... правильнее чтоли. Хотя работает вроде...
273
21 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=vesna]Спасибо за ответ.
Пока я так и делаю. Из строки, введенной в текстбокс просто удаляю всё ненужное. Просто мне кажется, использовать валидаторы... правильнее чтоли. Хотя работает вроде...[/quote]
Вот так как ты делаешь - это правильнее, т.к. работает быстрее..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог