Автор Тема: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)  (Прочетена 3644 пъти)

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Добър вечер (той май е нощ ама това е друг въпрос  ;D)

Имам следния въпрос:
Имам QLineEdit който има информация и на латиница и на кирилица. Как мога да направя така че в нов QString да записвам информацията на латиница, а тая на кирилица - да изчезне?

Благодаря предварително!
« Последна редакция: Jan 08, 2011, 23:21 от LinuxFanUNIX »
Активен

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
Виж този пример от документацията. Само трябва да си направиш regexp за буквите на кирилица.
Активен

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Въпроса е как да стане, при положение че не се приема кирилица написана в текстовия редактор?
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Въпроса е как да стане, при положение че не се приема кирилица написана в текстовия редактор?

Лесно :) Направи регулярен израз, който описва какво е позволено. Всеки стринг, които не мине се отхвърля ;)
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
@LinuxFanUNIX: Кирилицата се приема лесно. Ако изходният код ти е в utf8, то създаването на стринг за регулярния израз, трябва да стане чрез
Код:
Qstring regexp = QString::fromUtf8("[а-яА-Я]");
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
@LinuxFanUNIX: Кирилицата се приема лесно. Ако изходният код ти е в utf8, то създаването на стринг за регулярния израз, трябва да стане чрез
Код:
Qstring regexp = QString::fromUtf8("[а-яА-Я]");

Не е ли така:
Код:
Qstring regexp = QString::fromUtf8("[а-яА-Я]\u");
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
@LinuxFanUNIX, предполагам, че целта ти е да ограничиш полето да се въвеждат само латински букви и цифри. Защото ако премахнеш кирилицата, аз лесно мога да си сложа китайки примерно и да въвеждам негови знаци  ;) За това по-добре направи израза със символите, които искаш, а не с тези, които не искаш :)
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Или както каза Георги Чорбаджийски на една лекция по security issues:
Цитат
Проверявайте за вярно въведени данни, не за грешно въведени.

Ако полето е само за букви - няма да проверяваш дали са въведени числа, специални символи и т.н., а всичко което не е буква отива в else-а.
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
@backtolife: Това
Код:
\u
какво трябва да прави.

@LinuxFanUNIX: Ако идеята ти е в QLineEdit да се въвежда само латински букви, сложи му регулярен израз за това. Ако идеята ти е да може да се въвежда всичко, но да вземеш само латинските букви, може да пробваш това
Код:
QRegExp("(?![A-Za-Z])")
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
@backtolife: Това
Код:
\u
какво трябва да прави.

RTFM

@LinuxFanUNIX: Ако идеята ти е в QLineEdit да се въвежда само латински букви, сложи му регулярен израз за това. Ако идеята ти е да може да се въвежда всичко, но да вземеш само латинските букви, може да пробваш това
Код:
QRegExp("(?![A-Za-Z])")

Абе тука не се ли използва POSIX стандарта? Как така ще слагаш удивителна ( ! )пред регулярен израз? Слага се ^.

PS: Точно так Qt използва POSIX стандарт. За какво го бъркаш само момчето???
« Последна редакция: Jan 08, 2011, 19:01 от backtolife »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
@backtolife: Защо смяташ, че не съм го направил, преди да те попитам? Само за твоя информация търсенето в документацията за \u не намери нищо.

По отношение на втората ти бележка удивителната не е пред регулярния израз, а част от него. Ако се чудиш какво прави, ето какво казва документацията

Цитат
(?!E)
Negative lookahead. This assertion is true if the expression does not match at this point in the regexp. For example, const(?!\s+char) matches 'const' except when it is followed by 'char'.
Активен

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
@backtolife: Защо смяташ, че не съм го направил, преди да те попитам? Само за твоя информация търсенето в документацията за \u не намери нищо.

По отношение на втората ти бележка удивителната не е пред регулярния израз, а част от него. Ако се чудиш какво прави, ето какво казва документацията

Цитат
(?!E)
Negative lookahead. This assertion is true if the expression does not match at this point in the regexp. For example, const(?!\s+char) matches 'const' except when it is followed by 'char'.

Човек, ти писал ли си регулярни изрази някога?
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
backtolife ! е логическо НЕ в израза.
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

dvasilev

  • Напреднали
  • *****
  • Публикации: 200
  • Distribution: Kubuntu, Debian
  • Window Manager: KDE
    • Профил
    • WWW
@LinuxFanUNIX: Всъщност това, което съм ти предложил в предишния отговор няма да работи, защото в регулярния израз няма нищо за match-ване. Нещо съм се разсеял и съм ти написал lookahead част. Това, което ти трябва е
Код
GeSHi (C++):
  1. str.remove(QRegExp("[^A-Za-z]"));
Когато ползваш remove с регулярен израз бъде внимателен какво пишеш, ако ще match-ваш 2 и повече символа, защото функцията прави викане към replace.

//offtopic
@backtolife: Никога в живота си не съм виждал регулярни изрази, камо ли пък да ги пиша. Важното в случая е, че човека ще си свърши работата. Тъжно е, че такива експерти  в регулярните като теб изрази не допринесоха с нищо към това, а само влошиха отношението сигнал-шум във форума. Извинявай за сарказма.

Активен

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Благодаря на всички за отговорите и се извинявам ако съм аз причината да се скарате  :)

Така - последвах логиката на Георги Чорбаджийски от мнението на backtolife, но подобно на dvasilev - и аз мразя регулярните изрази, тъй че си направих собствена логика от няколко редчета:

Код
GeSHi (C++):
  1. QString title = appWin->ui->title->text();
  2.    QString title2;
  3.    for (int i=0; i<title.count(); i++) {
  4.        if (title.at(i) >= QChar('a') && title.at(i) <= QChar('z') || title.at(i) >= QChar('A') && title.at(i) <= QChar('Z') || title.at(i) >= QChar('0') && title.at(i) <= QChar('9') || title.at(i) == QChar(' ') || title.at(i) == QChar(':') || title.at(i) == QChar('(') || title.at(i) == QChar(')')) {
  5.        }
  6.    }

По този начин аз не "гоня" никои букви, просто допускам буквите от A до Z (голям и малък формат), цифри (0-9), интервали и някои знаци като кавички, двуеточие и т.н.!

Едно огромно благодаря за съветите! И моля Ви - не се карайте... Животът е само един!  ;)
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Как да направя текущия QLineEdit с по-голям border
Общ форум
LinuxFanUNIX 4 1249 Последна публикация Sep 22, 2010, 04:00
от LinuxFanUNIX