【发布时间】:2019-06-04 14:39:05
【问题描述】:
对于我的程序,我想使用一个 TextField,用户可以在其中输入邮政编码(德国邮政编码)。为此,我尝试了您在下面看到的内容。如果用户输入的数字超过 5 位,则每个额外的数字都应立即删除。当然,字母是不允许的。
当我在https://regex101.com/ 上使用这种模式 ^[0-9]{0,5}$ 时,它可以达到我的预期,但是当我在 JavaFX 中尝试它时它不起作用。但我还没有找到解决方案。
谁能告诉我我做错了什么?
编辑:对于尚未使用 JavaFX 的人:当用户只输入一个字符时,方法 check(String text) 被调用。因此,当有 1 到 5 位数字时,结果也应该为真。但仅此而已;-)
public class NumberTextField extends TextField{
ErrorLabel label;
NumberTextField(String text, ErrorLabel label){
setText(text);
setFont(Font.font("Calibri", 17));
setMinHeight(35);
setMinWidth(200);
setMaxWidth(200);
this.label = label;
}
NumberTextField(){}
@Override
public void replaceText(int start, int end, String text){
if(check(text)) {
super.replaceText(start, end, text);
}
}
@Override
public void replaceSelection(String text){
if(check(text)){
super.replaceSelection(text);
}
}
private boolean check(String text){
if(text.matches("^[0-9]{0,5}$")){
label.setText("Success");
label.setBlack();
return true;
} else{
return false;
}
}
【问题讨论】:
-
您不需要
^和$,因为使用.matches(),full 字符串必须已经与模式匹配。无论如何,它应该工作。"12345".matches("^[0-9]{0,5}$")给我true。 -
你如何告诉Java这个字段只有数字?你如何告诉 Java 字段长度只有 5 ?您可以每次都用这个正则表达式替换该字段 find
^\D*([0-9]{0,5})[\S\s]*replace$1 -
@mumpitz 你是对的,但是当我在文本字段中输入更多数字时,它不会删除额外的数字。只有字母会被立即删除
标签: regex javafx textfield zipcode