【发布时间】:2016-09-02 16:52:07
【问题描述】:
一些背景故事。我正在使用文本格式将输入过滤到文本字段中。我有一个只用于数字,一个用于字母数字字符,一个用于带小数的数字。这应该只有字母,并且只匹配“真”或“假”,不区分大小写。我下面的代码将只允许输入那些字母,这是我想要的功能,但它不会按顺序匹配。
UnaryOperator<TextFormatter.Change> filterBoolean = (TextFormatter.Change t) -> {
if (t.isReplaced()) {
if (t.getText().matches("[^tTrRuUFfAaLlSsEe]")) {
t.setText(t.getControlNewText().substring(t.getRangeStart(), t.getRangeEnd()));
}
} else if (t.isAdded()) {
if (t.getText().matches("[^tTrRuUFfAaLlSsEe]")) {
t.setText("");
} else if (t.getText().matches("[^tTrRuUFfAaLlSsEe]")) {
t.setText("");
}
}
return t;
};
getTextField().setTextFormatter(new TextFormatter<>(formatter));
我曾尝试通过将它们分开添加来使用此功能
|| t.getControlNewText().matches("[tT][rR][uU][eE]|[fF][aA][lL][sS][eE]")
|| t.getControlNewText().matches("[^([tT][rR][uU][eE]|[fF][aA][lL][sS][eE])]")
|| t.getControlNewText().matches("^([tT][rR][uU][eE]|[fF][aA][lL][sS][eE])")
到每个 t.getText() 行,但它似乎不起作用。 我有类似的文本格式化程序,允许任何字母数字字符最多 X 次,但这些对顺序不敏感。
所以我的问题是,如何编辑我的代码以允许对文本字段进行顺序敏感输入,我只想匹配“真”和“假”,不区分大小写?
【问题讨论】:
-
大部分是题外话,但我发现很难设想一个用例。如果用户应该输入“true”或“false”,为什么不直接使用复选框、单选按钮或切换按钮?
-
您可以将文本转换为小写字母。另外,如果您打算从
String获取此信息,我不确定为什么不能只使用Boolean.parseBoolean(someString)。 -
文本字段被动态添加到编辑器中,但这是个好主意。
-
为此使用正则表达式非常过分。只需手动检查字符串。
-
@James_D 公平点。这就是为什么我说我不确定。尽管如此,这是一种非常糟糕的方式来做到这一点。你绝对正确,这应该是一个切换。