我想用一个正则表达式来验证QLineEdit的文本。它应该允许从a到z加上A到Z加上土耳其语字符(üşöçÜŠÖ)加上从0到9的数字。我在谷歌上搜索了我的问题,找到了两个解决方案,但都不适合我。在一个解决方案中,它说“在regexp中包含土耳其语字符”,在另一个解决方案中,它说“使用土耳其语字符的unicode”。
下面是两个常用表达式
QRegExp exp = QRegExp("^[a-zA-Z0-9ğüşöçİĞÜŞÖÇ]+$");
QRegExp exp = QRegExp("^[a-zA-Z0-9\u00E7\u011F\u0131\u015F\u00F6\u00FC\u00C7\u011E\u0130\u015E\u00D6\u00DC]+$");
上面的两个正则表达式都不能验证名称SMAL。我还尝试了一个只包含土耳其字符的文本(üşöçÜŠÖ),但它不能被验证。当我从这两个文本中删除""字符时,它们可以被验证。我猜问题可能与“”字符有关。
我怎样才能解决这个问题?
注:我们在项目中使用Qt 4.6.3。
4条答案
按热度按时间66bbxpm51#
我认为这是一个编码问题。你使用了从
const char*
到QString
的隐式转换,这导致使用QString::fromAscii
。如果你想在这里使用非Latin 1编码,你需要调用QTextCodec::setCodecForCStrings
并设置保存源文件的编码。我会使用UTF-8编码,所以在应用程序初始化时应该这样做:我建议更清晰的解决方案来检查问题是否在这里。将代码保存为UTF-8编码,并使用
QString::fromUtf8
显式地使用UTF-8将字符串文字转换为QString
:tktrz96b2#
您可以尝试匹配
^\p{L}+$
,它是任何字母的简写。uajslkp63#
最有可能的是你需要
\w
。它包括任何字符(任何语言)数字和下划线字符。您可以排除
(?!_)\w
之类下划线。vi4fp9gy4#
你可能想试试这个?
它基本上忽略文本中从空格到波浪号的任何字符(几乎所有可打印字符)
此外,它还忽略了文本中的其他字符,我们发现在土耳其字母表。(ö,ç,ü,▷)。
因此,这个表达式捕获的都是土耳其语文本中不可打印的字符;你可以在文本中用“?”来代替它们。
希望能帮上忙!
祝你好运