crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QRegExp длина выражения
xu-user
  опции профиля:
сообщение 5.12.2011, 14:18
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 18
Регистрация: 22.6.2011
Пользователь №: 2761

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




Репутация:   0  


Доброго времени суток.
Небольшая проблема с регулярным выражением: мне нужно что бы пользователь ввел строго 11-ти значное число например, использую следующее выражение: "\\d{11}" , но в результате получаю что правильным оказывается любое число до 11-ти знаков включительно. Что я пропустил? Нужно строго 11-ти значное число.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 5.12.2011, 15:51
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

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




Репутация:   2  


"\\d{11}([0-9])"

вроде так или так, непомню.

"\\d{11}[0-9]"

Сообщение отредактировал sidsukana - 5.12.2011, 15:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 5.12.2011, 16:02
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Цитата(xu-user @ 5.12.2011, 15:18) *
в результате получаю что правильным оказывается любое число до 11-ти знаков включительно.

Похоже Вы накосячили где-то в другом месте, с условием проверки. Должно быть с точностью до наоборот.
"\\d{11}" - соответствует любой строке в которой есть последовательность из 11-ти чисел. Соответственно строка должна быть длинее 11-ти символов.
Чтоб проверять совпадение шаблона со всей строкой, добавьте условия начала и конца строки - "^\\d{11}$". Или посмотрите на QRegExp::exactMatch.

    s = "Test 1234567890END";
    qDebug() << s << s.contains(QRegExp("\\d{11}"));

    s = "Test 12345678901END";
    qDebug() << s << s.contains(QRegExp("\\d{11}"));

    s = "Test 123456789012END";
    qDebug() << s << s.contains(QRegExp("\\d{11}"));

    // ------------------

    s = "1234567890";
    qDebug() << s << s.contains(QRegExp("^\\d{11}$"));

    s = "12345678901";
    qDebug() << s << s.contains(QRegExp("^\\d{11}$"));

    s = "123456789012";
    qDebug() << s << s.contains(QRegExp("^\\d{11}$"));

    s = "Test 12345678901END";
    qDebug() << s << s.contains(QRegExp("^\\d{11}$"));


"Test 1234567890END" false 
"Test 12345678901END" true
"Test 123456789012END" true
"1234567890" false
"12345678901" true
"123456789012" false
"Test 12345678901END" false
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vankleef
  опции профиля:
сообщение 5.12.2011, 23:03
Сообщение #4


Студент
*

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

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




Репутация:   1  


ну регэкспом ты ограничил длинну и алфавит.
проверяй просто длину потом c помощью .length();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xu-user
  опции профиля:
сообщение 6.12.2011, 10:23
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 18
Регистрация: 22.6.2011
Пользователь №: 2761

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




Репутация:   0  


Цитата(Sokoloff @ 5.12.2011, 20:02) *
Чтоб проверять совпадение шаблона со всей строкой, добавьте условия начала и конца строки - "^\\d{11}$". Или посмотрите на QRegExp::exactMatch.

Выражение поправил, QRegExp::exactMatch то что нужно, всё заработало. Спасибо за разъяснение!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 23.11.2024, 2:02