如何使用 ajTextField
的格式模式验证字段DNI
?示例:72033197V
图案必须有:8个数字 + 1 个字母(12345678A)。
我已经编写了以下代码来验证 aDNI
并且它可以工作。这是正确的验证方式吗?
测试代码:
import java.util.regex.*;
import java.util.Scanner;
public class validarDNI {
public static void main(String[] args) {
String dniIntroducido = null;
Scanner miScanner = new Scanner(System.in);
Pattern patron = Pattern.compile("[0-9]{7,8}[A-Z a-z]");
System.out.print("Introduce un DNI correcto: ");
dniIntroducido = miScanner.nextLine();
Matcher mat = patron.matcher(dniIntroducido);
while(!mat.matches()){
System.out.println("El DNI introducido es incorrecto, por favor introduzca un DNI válido.");
System.out.print("Introduce un DNI correcto: ");
dniIntroducido = miScanner.nextLine();
mat = patron.matcher(dniIntroducido);
}
System.out.println("El DNI " + dniIntroducido + " es válido.");
}
}
好吧,我的问题是在将它导入 ajTextField
以验证它是否有 8 个数字和一个字母时出现。并且当输入字母时它变成大写(toUpperCase()
)。
他jTextField
叫:jTextField_DNI
。
我已经创建了一个事件private void textfield_DNIKeyPressed(java.awt.event.KeyEvent evt) {
,以便它逐个字符地检查,但是......我如何在中实现它jTextField
?
private void textfield_DNIKeyPressed(java.awt.event.KeyEvent evt) {
}
逐个字符检查时会遇到的问题是,如果每次用户输入一个字符时都进行验证,
"DNI no válido"
即使所有内容都正确写入,前 7 个也会导致。最推荐的事情是验证它何时JTextField
失去焦点,或者用户点击保存、下一步或任何按钮继续。要验证它何时失去焦点,您添加一个
FocusListener
toJTextField
并实现该方法focusLost
:或者,如果您希望逐个字符地添加一个
KeyListener
toJTextField
并选择 3 种方法之一来实现您想要的逻辑:使用此方法,您可以验证数字部分的字母是否正确,因为您知道 23 的数字部分(8 位)的模块响应对应于字符串 dniChars 的字符的字母