如何将文本输入限制为TextField,其中唯一有效的字符是数字和字母?我已经看到了很多答案,我尝试了其中一个,但由于某种原因,我无法使用退格。课程如下。
private class NoSpaceField extends TextField {
public void replaceText(int start, int end, String text) {
String old = getText();
if (text.matches("[A-Za-z0-9\b]")) {
super.replaceText(start, end, text);
}
if (getText().length() > 16)
setText(old);
positionCaret(getText().length());
}
public void replaceSelection(String text) {
String old = getText();
if (text.matches("[A-Za-z0-9\b]")) {
super.replaceSelection(text);
}
if (getText().length() > 16)
setText(old);
positionCaret(getText().length());
}
}
我在RegEx上很糟糕,并且不知道如何将退格添加为有效字符。另外,我使用上面的类(稍加修改)用于不同的目的,它工作正常。
答案 0 :(得分:1)
如果您使用的是Java 8u40,则可以使用TextFormatter,i。即像这样的过滤器:
TextField textField = new TextField();
TextFormatter<String> formatter = new TextFormatter<String>( change -> {
change.setText(change.getText().replaceAll("[^a-zA-Z0-9]", ""));
return change;
});
textField.setTextFormatter(formatter);
这也解决了你的问题。 G。将一些无效文本粘贴到文本字段中。
如果你是较低的jdk,那么你可能想尝试Christian Schudt的RestrictiveTextField。允许您限制字符,仍然使用光标键,退格键等
答案 1 :(得分:0)
\ b是退格符的ascii代码。您可以在正则表达式中使用它。
text.matches(&#34; [A-ZA-Z0-9 \ B]&#34)
应该做的伎俩
答案 2 :(得分:0)
通过使用空字符串调用replaceText
以及表示要删除的字符位置的索引来执行删除字符。由于正则表达式与空字符串不匹配,因此将忽略删除。
您可能想要的是接受“零个或多个”有效字符。这样,您将识别空字符串,并支持多个字符的复制和粘贴。这个正则表达式看起来像
private class NoSpaceField extends TextField {
public void replaceText(int start, int end, String text) {
String old = getText();
if (text.matches("[A-Za-z0-9]*")) {
super.replaceText(start, end, text);
}
if (getText().length() > 16)
setText(old);
positionCaret(getText().length());
}
public void replaceSelection(String text) {
String old = getText();
if (text.matches("[A-Za-z0-9]*")) {
super.replaceSelection(text);
}
if (getText().length() > 16)
setText(old);
positionCaret(getText().length());
}
}