Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование только определённых символов 
:(
    Опции темы
N1ko
Дата 15.6.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Если у меня строка содержит символы русского английского алфавита и цифры, делать то то... Если нет, вызвать message box с сообщением и ввести символы заново. Как это реализовать попроще в c#?

Или прийдётся ввести в масив все нужные мне символы и буквы, а потом сверять их наличие в нужной мне строке?

Это сообщение отредактировал(а) N1ko - 15.6.2009, 22:42
PM MAIL ICQ   Вверх
Grok
Дата 16.6.2009, 00:53 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 17.12.2007

Репутация: нет
Всего: нет



что-то вроде этого:

Код

      if (Regex.IsMatch(strInput, "\\w"))
      {

      }
      else
      {
          MessageBox.Show("text");
      }


только если strInput будет считываться с файла, то для конструктора StreamReader нужно будет указать соответсвенную кодировку, чтобы нормально работало с кирилицей, например:
Код

using (StreamReader st = new StreamReader("text.txt", Encoding.GetEncoding(1251)))
{
      string strInput = st.ReadToEnd();
}

PM MAIL ICQ   Вверх
N1ko
Дата 19.6.2009, 01:45 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Пробую использовать regex, но ничего не получается.  Я хочу проверить строку на наличие исключительно цифр или букв. То есть если в строке будут символы типо запятой. точек и тп, строка буде не верной. А у меня сейчас програма проверяет строку на наличие указаных мной символов, но ей пофиг есть ли там пунктуационные знаки и тп. Как это записать? Через оператор ^ будет глуповато перечислять все ненужные мне символы.
PM MAIL ICQ   Вверх
diadiavova
Дата 19.6.2009, 06:51 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цифры обозначаются так \d, буквы так [\w-[\d]]


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
N1ko
Дата 19.6.2009, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Так тоже пробовал. Но если в строку попадает какой нибуть пунктуационный знак и в тоже время в ней есть буквы и цифры, програма считает строку правильной... А мне надо что бы она ругалась, когда в строку попадают символы не относящиеся к алфавиту или пунктуационные знаки.
PM MAIL ICQ   Вверх
diadiavova
Дата 19.6.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Для символов, не относящихся к алфавиту есть спецсимвол \W. Точнее сказать это НЕ \w, а учитывая, что последний кроме алфавитных символов включает ещё и цифры, то неалфавит будет таким [\W\d]. И проверять надо при помощи функции IsMatch
Код

if(Regex.IsMatch(sample, @"[\W\d]") 
Messagebox.Show("Текст содержит недопустимые символы");



Это сообщение отредактировал(а) diadiavova - 19.6.2009, 13:57


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
N1ko
Дата 19.6.2009, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Хорошо... Допустим я ввожу строку "qwerty;.,1" в текстовое поле. В данной строке  присутствуют как символы алфавита, пунктуационные знаки так и цифры.  Попробовал твой вариант, но программа пропускает этот случай и считает его правильным.(Хотя алфавит вроде бы и запрещён) Поскольку в строке есть всего лишь один разрешённый символ(цифра).
PM MAIL ICQ   Вверх
diadiavova
Дата 19.6.2009, 14:36 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Я не правильно написал, тут надо не проверять на соответствие, а проверять их количество
Код

if(Regex.Matches(sample, @"[\W\d]").Count>0) 
Messagebox.Show("Текст содержит недопустимые символы");

бывает smile 

Это сообщение отредактировал(а) diadiavova - 19.6.2009, 14:37


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Grok
Дата 20.6.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 17.12.2007

Репутация: нет
Всего: нет



N1ko, в коде что писал diadiavova
Код

if(Regex.IsMatch(sample, @"[\W\d]") 
Messagebox.Show("Текст содержит недопустимые символы");

данный предикат есть true, если в строке встречается неалфавитный символ или цифра, 
соответственно в сроке "qwerty;.,1" их есть целых 4(";.,1"), при наличии хотя бы одного из них строка правильная,
и если ты хочешь исключить в строке эти символы, тоесть строка была бы корректной, если они не встречаются, то соответствено 
Код

if(!Regex.IsMatch(sample, @"[\W\d]") 
Messagebox.Show("Текст валиден");


Это сообщение отредактировал(а) Grok - 20.6.2009, 00:55
PM MAIL ICQ   Вверх
N1ko
Дата 12.9.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Пишу вот такую строку
 
Код

if (!Regex.IsMatch(textBox_NewStorage.Text, @"[\W][\S]"))
{
MessageBox.Show("Valid");
}

подразумевая под ней что моя строка может содержать буквы, цифры и знак пробела. НО не может содержать другие знаки:точки запятые и тп. Потом например ввожу следующую строку "sdf sdfg" Сообщение на окно не вылазит. Что я делаю не так. Уже всё перерыл в поисках ответа.
PM MAIL ICQ   Вверх
diadiavova
Дата 12.9.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Код

if (Regex.IsMatch(textBox_NewStorage.Text, @"[а-яА-Яa-zA-Z\d]+"))
{
     MessageBox.Show("Valid");
}


Это сообщение отредактировал(а) diadiavova - 12.9.2009, 14:25


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
N1ko
Дата 12.9.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Попробовал твой ваиант Допустим ввожу строку "ffggr;;;ewqq", оно её принимает как правильную хотя поскольку здесь присутствуют точки с запятой, теоретически такого быть не должно
PM MAIL ICQ   Вверх
diadiavova
Дата 12.9.2009, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Код

            if (Regex.IsMatch(textBox_NewStorage.Text, @"^[а-яА-Яa-zA-Z\d]+$", RegexOptions.Singleline))
            {
                MessageBox.Show("Valid");
            }
            else
            {
                MessageBox.Show("Inalid");
            
            }



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
N1ko
Дата 12.9.2009, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



А что значит ^ и +$ в данном случае? Читал инфу по поводу этих знаков, но всё равно не очень понятно зачем они здесь

Это сообщение отредактировал(а) N1ko - 12.9.2009, 23:04
PM MAIL ICQ   Вверх
diadiavova
Дата 12.9.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Цитата(N1ko @  13.9.2009,  00:03 Найти цитируемый пост)
А что значит ^ и +$ в данном случае? 

Начало и конец проверяемой строки. Без них берётся только часть строки и выдаётся ответ, что типа соответствует, а та часть, где точки с запятой не учитывается. Эти значки показывают, что соответствие должно быть подтверждено ели только вся строка соответствует шаблону. Но их значение при однострочном и многострочном форматах немного отличается, но всё в документации есть.

Добавлено через 7 минут и 46 секунд
А да, только сейчас заметил. Плюсик показывает, что символ может встречаться один или более раз. Без него шаблон соответствует одному символу.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Экскалупатор
Дата 12.9.2009, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



а что если по коду символов проверять? т.е. если символ попадает в заданный диапазон то все ок. а если нет то ставим счетчику +1, и потом проверяем счетчик?
сильно не кричите, мне просто интересно, будет ли это нормальным или лучше все таки через regex?
PM MAIL ICQ   Вверх
diadiavova
Дата 13.9.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 18
Всего: 142



Экскалупатор, Тогда придётся проверять несколько диапазонов для  каждого символа и если задача слегка изменится код может сильно усложнится. Регулярные выражения сильно упрощают весь процесс: небольшой шаблон и простейший код обработки, в случае изменения задачи немного подправить шаблон и всё.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.