Regex 在QML应用程序中指定十进制符号
在QML中指定十进制符号 我想让用户只使用小数点符号,而不管他的机器在哪个语言环境中。 例如,我们支持en_US和nl_nl,但在这两种语言设置中,我们希望限制用户仅使用点作为十进制符号。(与之通信的遗留系统到期) 我尝试了不同的方法: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
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 + "})?$")