Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: LinuxFanUNIX в Jan 08, 2011, 04:09



Титла: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: LinuxFanUNIX в Jan 08, 2011, 04:09
Добър вечер (той май е нощ ама това е друг въпрос  ;D)

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

Благодаря предварително!


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: dvasilev в Jan 08, 2011, 10:40
Виж този пример ($2) от документацията. Само трябва да си направиш regexp за буквите на кирилица.


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: LinuxFanUNIX в Jan 08, 2011, 15:58
Въпроса е как да стане, при положение че не се приема кирилица написана в текстовия редактор?


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: task_struct в Jan 08, 2011, 16:23
Въпроса е как да стане, при положение че не се приема кирилица написана в текстовия редактор?

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


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: dvasilev в Jan 08, 2011, 17:29
@LinuxFanUNIX: Кирилицата се приема лесно. Ако изходният код ти е в utf8, то създаването на стринг за регулярния израз, трябва да стане чрез
Код:
Qstring regexp = QString::fromUtf8("[а-яА-Я]");


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: b2l в Jan 08, 2011, 17:32
@LinuxFanUNIX: Кирилицата се приема лесно. Ако изходният код ти е в utf8, то създаването на стринг за регулярния израз, трябва да стане чрез
Код:
Qstring regexp = QString::fromUtf8("[а-яА-Я]");

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


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: task_struct в Jan 08, 2011, 17:39
@LinuxFanUNIX, предполагам, че целта ти е да ограничиш полето да се въвеждат само латински букви и цифри. Защото ако премахнеш кирилицата, аз лесно мога да си сложа китайки примерно и да въвеждам негови знаци  ;) За това по-добре направи израза със символите, които искаш, а не с тези, които не искаш :)


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: b2l в Jan 08, 2011, 17:50
Или както каза Георги Чорбаджийски на една лекция по security issues:
Цитат
Проверявайте за вярно въведени данни, не за грешно въведени.

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


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: dvasilev в Jan 08, 2011, 18:55
@backtolife: Това
Код:
\u
какво трябва да прави.

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


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: b2l в Jan 08, 2011, 18:59
@backtolife: Това
Код:
\u
какво трябва да прави.

RTFM

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

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

PS: Точно так Qt използва POSIX стандарт. За какво го бъркаш само момчето???


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: dvasilev в Jan 08, 2011, 19:25
@backtolife: Защо смяташ, че не съм го направил, преди да те попитам? Само за твоя информация търсенето в документацията за \u не намери нищо.

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

Цитат
(?!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'.


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: b2l в Jan 08, 2011, 19:35
@backtolife: Защо смяташ, че не съм го направил, преди да те попитам? Само за твоя информация търсенето в документацията за \u не намери нищо.

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

Цитат
(?!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'.

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


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: borovaka в Jan 08, 2011, 19:49
backtolife ! е логическо НЕ в израза.


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: dvasilev в Jan 08, 2011, 21:40
@LinuxFanUNIX: Всъщност това, което съм ти предложил в предишния отговор няма да работи, защото в регулярния израз няма нищо за match-ване. Нещо съм се разсеял и съм ти написал lookahead част. Това, което ти трябва е
Код
GeSHi (C++):
  1. str.remove(QRegExp("[^A-Za-z]"));
Когато ползваш remove с регулярен израз бъде внимателен какво пишеш, ако ще match-ваш 2 и повече символа, защото функцията прави викане към replace.

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



Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: LinuxFanUNIX в Jan 08, 2011, 23:19
Благодаря на всички за отговорите и се извинявам ако съм аз причината да се скарате  :)

Така - последвах логиката на Георги Чорбаджийски от мнението на 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), интервали и някои знаци като кавички, двуеточие и т.н.!

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


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: dvasilev в Jan 08, 2011, 23:46
@LinuxFanUNIX: Не мразя регулярните изрази, ползвам ги с кеф, където мога. Аналогът на това, което си написал е:
Код
GeSHi (C++):
  1. QString title = appWin->ui->title->text().remove(QRegExp("[^A-Za-z0-9\\(:\\)\\s]"));


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: LinuxFanUNIX в Jan 09, 2011, 04:31
Имам html страница. И искам от нея да взема всички линкове, сочещи към снимки качени на даден сървър...

Пример:
<HTML><HEAD>
...
<div>
<div>
...
<IMG SRC="http://www.weblo.com/asset_images/НЯКАКВО ИМЕ.JPG>"

И на мен да ми изведе в един QStringList всички снимки качени на http://www.weblo.com/asset_images!

Благодаря ти предварително! Знам че ще се справиш!  ;)


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: dvasilev в Jan 09, 2011, 12:11
@LinuxFanUNIX: Ако това е целта на цялото упражнение, налей си html-а в един QWebFrame, от там много лесно може да извадиш src атрибутите на img таговете. След това лесно ще си match-неш url-тата на картинките, които те интересуват. Ако нещо не е ясно как става, питай?


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: LinuxFanUNIX в Jan 09, 2011, 15:00
@LinuxFanUNIX: Ако това е целта на цялото упражнение, налей си html-а в един QWebFrame, от там много лесно може да извадиш src атрибутите на img таговете. След това лесно ще си match-неш url-тата на картинките, които те интересуват. Ако нещо не е ясно как става, питай?
За принципа се сещам, обаче на практика не мога да приложа. Ето какво опитвам, но все удрям на камък:
Код
GeSHi (C++):
  1. QString htmlOutput = wb->page()->currentFrame()->toHtml();
  2.    QString htmlFormated = htmlOutput.remove(QRegExp("^http://www.weblo.com/asset_images/([^\\[]*)jpg"));

Та, ако може малко да помогнеш, ще съм ти благодарен...  :)


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: dvasilev в Jan 09, 2011, 16:37
@LinuxFanUNIX: Нещо от сорта би трябвало да ти свърши работа:
Код
GeSHi (C++):
  1. QRegExp rx("^http://www.weblo.com/asset_images/.+\\.jpg$", Qt::CaseInsensitive);
  2. QStringList imgSrcList;
  3. QWebElementCollection elements = wb->page()->mainFrame()->findAllElements("img");
  4. for (int i = 0; i < elements.count(); i++)
  5. {
  6.         QString imgSrc = elements.at(i).attribute("src");
  7.         if (imgSrc.contains(rx))
  8.         {
  9.                   imgSrcList.append(imgSrc);
  10.         }
  11. }


Титла: Re: Премахване на кирилски букви от поле за въвеждане на текст (QLineEdit)
Публикувано от: LinuxFanUNIX в Jan 10, 2011, 03:16
Благодаря ти много, dvasilev! Имаш моите най-искрени благодарности! Жив и здрав дълги години!  ;)  [_]3  ::)