Я пытался выяснить выражения REGEX, которые могут фильтровать символы, которые не являются '-' или 0-9.Это выражение будет использоваться с фильтром документа, который будет фильтровать символы, вставляемые в JTextFields.Позвольте мне объяснить более подробно ...
Когда пользователь вводит символ в JTextField, DocumentFilter проверяет ввод, используя метод replace в классе DocumentFilter.Поскольку метод вызывается каждый раз, когда вставляется символ, REGEX должен был иметь возможность обрабатывать части целого числа, когда пользователь строит строку.Например,
Key Press 1): Value = '-' PASS
Key Press 2): Value = '-1' PASS
Key Press 3): Value = '-10' PASS etc...
Однако фильтр не должен разрешать комбинацию '-0' или '-' и должен пропускать следующие случаи:
Только отрицательный символ ('-')
Отрицательный номер без нуля рядом с '-' (сбой '-01')
Положительные значения (проход 0122 и 122)
Вот мой код:
package regex;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class CustomFilter extends DocumentFilter {
private String regex = "((-?)([1-9]??))(\d)";
/**
* Called every time a new character is added.
*/
@Override
public void insertString(DocumentFilter.FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
String text = fb.getDocument().getText(0, fb.getDocument().getLength());
text += string;
if(text.matches(regex)) {
super.insertString(fb, offset, string, attr);
}
}
/**
* Called when the user pastes in new text.
*/
@Override
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
String string = fb.getDocument().getText(0, fb.getDocument().getLength());
string += text;
if(string.matches(regex)) {
super.replace(fb, offset, length, text, attrs);
}
}
@Override
public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
super.remove(fb, offset, length); // I may modify this later
}
}
Если вы считаете, что я иду по неверному пути, пожалуйста, дайте мне знать.Я открыт для более упрощенного варианта.