Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在QML应用程序中指定十进制符号_Regex_Qt_Qml_Decimal_Locale - Fatal编程技术网

Regex 在QML应用程序中指定十进制符号

Regex 在QML应用程序中指定十进制符号,regex,qt,qml,decimal,locale,Regex,Qt,Qml,Decimal,Locale,在QML中指定十进制符号 我想让用户只使用小数点符号,而不管他的机器在哪个语言环境中。 例如,我们支持en_US和nl_nl,但在这两种语言设置中,我们希望限制用户仅使用点作为十进制符号。(与之通信的遗留系统到期) 我尝试了不同的方法: QLocale newLanguageLocale = QLocale(QLocale::Dutch, QLocale::Netherlands); newLanguageLocale.setNumberOptions(QLocale::c().numberOp

在QML中指定十进制符号

我想让用户只使用小数点符号,而不管他的机器在哪个语言环境中。 例如,我们支持en_US和nl_nl,但在这两种语言设置中,我们希望限制用户仅使用点作为十进制符号。(与之通信的遗留系统到期)

我尝试了不同的方法:

QLocale newLanguageLocale = QLocale(QLocale::Dutch, QLocale::Netherlands);
newLanguageLocale.setNumberOptions(QLocale::c().numberOptions());
QLocale::setDefault(newLanguageLocale);
在QML中:

Item 
{
    property int numberOfDecimals: 3

    TextInput
    {
        validator: doubleChecker
    }

    DoubleValidator
    {
        id: doubleChecker
        decimals: numberOfDecimals
        notation: DoubleValidator.StandardNotation
    }
}
  • locale en_US:可以输入点,一切正常
  • locale nl_nl:可以输入点,但它用作千位分隔符。逗号仍然可以使用。(不需要)
因此,我尝试在
TextInput
中使用
RegExpValidator
来解决它,但这不允许我创建fly的正则表达式。我需要它,因为
小数位数可以更改

RegExpValidator
{
    id: doubleChecker
    //regExp: /^-?[0-9]+(\.[0-9]{1,3})?$/   // This works (3 decimals), but I want to be able have a specified numberOfDecimals (some fields have different settings)
    regExp: new RegExp('/^-?[0-9]+(\.[0-9]{1,' + numberOfDecimals + '})?$/') // doesn't work, can enter unlimited amount of decimals. Also when field is empty, I cannot type
}
你知道怎么做吗?我是否在
RegExpValidator

中犯了语法错误?您需要正确使用构造函数表示法。这意味着:

  • 您需要使用双转义来定义正则转义(即,
    “\\.”
    来匹配文字点,或者它将匹配除换行字符以外的任何字符),或者用字符类
    […]
    将其括起来
  • 您不需要前导/尾随的
    /
    ,即regex分隔符,因为它们用于regex文字表示法
所以,你需要

new RegExp("^-?[0-9]+([.][0-9]{1," + numberOfDecimals + "})?$")

这里使用构造函数表示法是正确的,因为只有这种表示法才允许将变量传递给regex模式


查看有关如何使用的更多信息。

@WiktorStribiżew感谢它正在工作!要不要把它贴出来作为答案,这样我就可以把它标为接受了?
new RegExp("^-?[0-9]+(\\.[0-9]{1," + numberOfDecimals + "})?$")