中犯了语法错误
qml
中指定十进制符号我只想让用户仅将DOT用于十进制符号,而不管他的机器在哪个位置。例如,我们支持en_us和nl_nl,但是在这两种语言设置中,我们都希望将用户仅使用DOT作为十进制符号。(与之通信的应有的旧系统(
我尝试了不同的方法:
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
}
}
- LICALE EN_US:可以输入点,一切都按预期工作
- loCale nl_nl:可以输入点,但用作千分离器。逗号仍然可以使用。(不想要(
因此,我尝试通过使用RegExpValidator
在TextInput
中解决它,但这不允许我创建苍蝇的正则表达式。我需要的是因为numberOfDecimals
可以更改。
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
您需要正确使用构造符符号。这意味着:
- 您需要使用Double Escapes来定义正则逃脱(也就是说,
"\."
以匹配字面的点,或者它将匹配以外的任何字符(,或将其与[...]
一起包裹,一个字符类 - 您不需要领先/尾随的
/
,称为正则分界符,因为它们在A REGEX LITERAL nevention中使用。
所以,您需要
new RegExp("^-?[0-9]+([.][0-9]{1," + numberOfDecimals + "})?$")
或
new RegExp("^-?[0-9]+(\.[0-9]{1," + numberOfDecimals + "})?$")
在此处使用构造函数符号是正确的,因为只有此符号允许将变量传递给正则模式。
查看有关如何在MDN上使用RegExp
的更多信息。