我不能让我的正则表达式模式能够输入小数或分数
这是我的模式:\\d{0,5}([./]\\d{0,3})?
我的目标输入是十进制(12345.123),分数(12345 12/12)
我也尝试过这种模式:\\d{0,5}([.]\\d{0,3})?|\\d{0,5}^\\s([/]\\d{0,3})?$
但它没有用..
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.text.DefaultFormatter;
public class Regex extends DefaultFormatter {
/**
*
*/
private static final long serialVersionUID = 1L;
private Matcher matcher;
public Regex(Pattern regex) {
setOverwriteMode(false);
matcher = regex.matcher(""); // create a Matcher for the regular expression
}
public Object stringToValue(String string) throws java.text.ParseException {
if (string == null || string.trim().equals("")) return null;
matcher.reset(string); // set 'string' as the matcher's input
if (! matcher.matches()) // Does 'string' match the regular expression?
throw new java.text.ParseException("does not match regex", 0);
// If we get this far, then it did match.
return super.stringToValue(string); // will honor the 'valueClass' property
}
}
然后我将它用于 JFormattedTextField
Pattern decFraction = Pattern.compile("\\d{1,5}([.]\\d{1,3}|(\\s\\d{1,5})?[/]\\d{1,3})?");
Regex Format = new Regex(decFraction);
Format.setAllowsInvalid(false);
JFormattedTextField Field = new JFormattedTextField(Format)