crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

Andrewshkovskii
  опции профиля:
сообщение 5.4.2009, 18:40
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


Пишу вот форму регистрации, есть следующий код :

функция проверки

QString RegisterForm::validateAll()
{
    QString passwordval   ("/^(?=.*\d)(?=.*([a-z]|[A-Z]))([\x20-\x7E]){8,12}$/");
    QString mailval       ("/^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/");
    QString usernameval   ("^[A-Za-z0-9]$");
    QString lastAndFirstNameval  ("/[а-яА-Я\s\-]/");
    int pos =0;
    regexp->setPattern(lastAndFirstNameval);
    if((validator->validate(FName,pos))==0) || (validator->validate(FName,pos)) == 1 );
     return "Invalid first name";
   if((validator->validate(LName,pos))==0 )|| (validator->validate(LName,pos)) == 1 );
     return "Invalid last name";
    regexp->setPattern(usernameval);
    if((validator->validate(Nickname,pos))==QValidator::Invalid) || (validator->validate(Nickname,pos)) == 1 );
     return "Invalid username";
    regexp->setPattern(mailval);
    if((validator->validate(EMail,pos))==0) || (validator->validate(EMail,pos)) == 1 );
     return "Invalid e-mail adress";
    regexp->setPattern(passwordval);
    if((validator->validate(Password,pos))==0) || (validator->validate(Password,pos)) == 1 );
     return "Invalid password";
    if(Password!=ConfirmPassword)
         return "Confirm password != password";
                 else return "all validated";
 }


Эта функция вызывается в слоте, по нажатию кнопочки OK, все данные(QString'ги FName и т.д) получаю из QLineEdit'ов.

Валидатор создается так :
 regexp = new QRegExp;
 validator = new QRegExpValidator(*regexp,0);


Проблема - при любом раскладе будет возвращать Invalid first name и далее(last name, username..) почему?Рег-экспы не правильно написал?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V  < 1 2  
Начать новую тему
Ответов (10 - 14)
molchanoviv
  опции профиля:
сообщение 6.4.2009, 7:48
Сообщение #11


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


Цитата(Litkevich Yuriy @ 5.4.2009, 22:28) *
molchanoviv, тыб ссылочку на страницу проекта дал, а то сразу загрузка.

Официальной страницы я не знаю, а гугл первой ссылкой по запросу regexp planner ведет на crossplatform.ru
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 6.4.2009, 7:53
Сообщение #12


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Andrewshkovskii,
тебя подобные строки при компиляции не смущали?
Цитата
regform.cpp:96:28: warning: unknown escape sequence '\w'
regform.cpp:96:28: warning: unknown escape sequence '\.'
regform.cpp:96:28: warning: unknown escape sequence '\w'
regform.cpp:96:28: warning: unknown escape sequence '\.'
regform.cpp:96:28: warning: unknown escape sequence '\w'

это компилятор ругается что не знает таких символов. \n \0 \b знает а \w \. просто нету. чтобы написать обр. слэш в строке надо написать два и выражение твое будет:
QString mailval ("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$");
еще вопрос какой смысл использовать new при создании рег.выражения. зачем?
почему не создать его протсто

QRegExp("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$");
?

Сообщение отредактировал kwisp - 6.4.2009, 7:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.4.2009, 7:59
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(molchanoviv @ 6.4.2009, 11:48) *
а гугл первой ссылкой по запросу regexp planner ведет на crossplatform.ru
вот туда и можно сходить а там перейти по ссылке на форум и увидеть ссылку на оригинальный сайт и мой перевод программы :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrewshkovskii
  опции профиля:
сообщение 6.4.2009, 10:36
Сообщение #14


Активный участник
***

Группа: Участник
Сообщений: 351
Регистрация: 27.12.2008
Пользователь №: 467

Спасибо сказали: 18 раз(а)




Репутация:   1  


new - уже привычка работать с объектами через указатель...:)
Символы как-то я не подумал..:/
Только это проблемы не решает, я исправил все регэкспы на нормальные, а результат все тот же, ошибка в логике кода, видимо..

Сообщение отредактировал Andrewshkovskii - 6.4.2009, 10:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 6.4.2009, 11:56
Сообщение #15


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Andrewshkovskii @ 6.4.2009, 11:36) *
new - уже привычка работать с объектами через указатель...

помоему в случае работы с регулярными выражениями это лишнее.
я переправил код на свой вкус - как писал выше корректно работает минимум первый раз до обновления поля ввода имени.
если тебе это поможет вот как я написал
QString RegisterForm::validateAll()
{
    std::cout<<__func__<<"\n";
    QString passwordval   ("(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,15})$");
    QString mailval       ("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$");
    QString usernameval   ("[a-zA-Z0-9]+");
    QString lastAndFirstNameval  ("([Aa-ZzАа-Яя])+");
    if(FName.indexOf(QRegExp("([Aa-Zz])+")) == 0)
            return "good";
    return "crutch";
 }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.7.2025, 18:44