Ich möchte den QLineEdit-Text mit einem regulären Ausdruck validieren. Es sollten Zeichen von a bis z plus A bis Z plus türkische Zeichen (ğüşöçİĞÜŞÖÇ) plus Zahlen von 0 bis 9 erlaubt werden. Ich habe über mein Problem gegoogelt und zwei Lösungen gefunden, aber keine funktionierte für mich. In einer Lösung heißt es "schließt türkische Zeichen in Regexp ein" und in anderen heißt es "benutzt Unicodes türkischer Zeichen"
Unten sind zwei reqular Ausdrücke
%Vor%Keiner der obigen Ausdrücke kann den Namen 'İSMAİL' validieren. Ich habe auch versucht, dass ein Text nur türkische Zeichen enthält ("ğüşöçİĞÜŞÖÇ"), aber er kann nicht validiert werden. Wenn ich den Buchstaben '©' aus beiden Texten entferne, können sie validiert werden. Ich nehme an, dass das Problem mit 'Charakter' in Verbindung gebracht werden kann.
Wie kann ich das Problem lösen?
Hinweis: Wir verwenden Qt 4.6.3 in unserem Projekt.
Ich denke, das ist ein Codierungsproblem. Sie verwenden die implizite Umwandlung von const char*
nach QString
, was zur Verwendung von QString::fromAscii
führt. Wenn Sie hier nicht-Latin1-Kodierung verwenden möchten, müssen Sie QTextCodec::setCodecForCStrings
aufrufen und die Kodierung einstellen, in der Ihre Quelldateien gespeichert sind. Ich würde UTF-8-Kodierung verwenden, also sollte die Initialisierung der App so erfolgen :
Ich schlage eine klarere Lösung vor, um zu überprüfen, ob Ihr Problem hier ist. Speichern Sie Ihren Code in der UTF-8-Codierung und verwenden Sie QString::fromUtf8
, um Ihre String-Literale mit Hilfe von UTF-8 explizit in QString
zu konvertieren:
sehr wahrscheinlich brauchen Sie \w
. Es enthält ein beliebiges Zeichen (beliebige Sprache) Ziffern und Unterstrich.
Sie können Unterstriche wie (?!_)\w
ausschließen.