如何将文本输入到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方面很糟糕,也不知道如何将backspace作为一个有效字符添加。另外,我已经将上面的类(稍微修改了一下)用于不同的用途,而且它工作得很好。
发布于 2015-03-16 12:24:00
删除字符是通过使用空字符串和表示要删除的字符位置的索引调用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());
}
}
发布于 2015-03-16 04:45:28
如果您在Java8u40上,您可以使用TextFormatter,即像这样的过滤器:
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);
这也解决了当您将一些无效文本粘贴到textfield中时的问题。
如果您使用的是较低的jdk,那么您可能希望使用Christian Schudt的RestrictiveTextField。允许您限制字符,并仍然使用光标键,后退空间等。
发布于 2015-03-16 02:29:02
B是后置字符的ascii代码。你可以在你的regex里用这个。
text.matches("A-Za-z0-9\b")
应该做点什么
https://stackoverflow.com/questions/29068691
复制相似问题