J'ai un formulaire (JTable) pour demander l'accès au pare-feu. Pour le JTextField dans lequel l'utilisateur doit entrer les sources, je voudrais vérifier l'entrée en temps réel pendant que l'utilisateur tape. Les entrées valides seront surlignées en vert. Invalide ne devrait pas être autorisé.Vérifier l'entrée dans JTextField En temps réel
Les regex suivantes sont entrées valides:
private static final String IP_Address = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\d";//56.1.2.3
private static final String IP_WithMask = "(\\d{1,3}.){3}(\\d{1,3})(?:\\s+[255])(\\d{1,3}.){3}(\\d{1,3})"; //56.1.2.3 255.255.255.254
private static final String IP_CIDR = "(\\d{1,3}.){3}(\\d{1,3})(?:\\s*/)(\\d{1,3})"; //56.1.2.3/24
private static final String IP_ADDRESS_Dash_Numeric_RANGE = "((\\d{1,3}.){3}(\\d{1,3})(?:\\s*-)(\\d{1,3}))";// 56.1.2.3-4
private static final String IP_ADDRESS_Dash_ADDRESS_RANGE = "((\\d{1,3}.){3}(\\d{1,3})(?:\\s*-\\s*)(\\d{1,3}.){3}(\\d{1,3}))";//56.1.2.3-56.1.2.5
private static final String IP_ADDRESS_To_Numeric_RANGE = "(\\d{1,3}.){3}(\\d{1,3})(?:\\s*[T|t][O|o]\\s*)(\\d{1,3})";//56.1.2.3 to 255
private static final String IP_ADDRESS_To_ADDRESS_RANGE = "((\\d{1,3}.){3}(\\d{1,3})(?:\\s*[T|t][O|o]\\s*)(\\d{1,3}.){3}(\\d{1,3}))";//56.1.2.3 to 56.1.3.5
Dans le JTextField, l'utilisateur peut taper toute permutation de ceux-ci. J'ai besoin d'identifier/vérifier chaque type pour agir sur eux plus tard.
J'utilise
et appliquerai à mon JTextField avec:
setInputVerifier();
Questions: 1. quelqu'un peut me donner une expression régulière qui captera tous ces cas? 2. Comment faites-vous correspondre en temps réel lorsque quelqu'un tape? Peut-être attacher un TextListener au JTextField?
Je peux fournir plus de code si nécessaire.
Veuillez indiquer clairement votre problème. Vous avez déjà listé les modèles regex ci-dessus, de quel autre modèle regex avez-vous besoin? Pour capturer quels cas? Et voyez http://stackoverflow.com/questions/2749521/how-to-validate-a-texttext pour la validation des données dans JTextField. –
Mon problème est que j'ai plusieurs expressions rationnelles que j'essaie de faire correspondre comme indiqué ci-dessus. Dans le champ de texte, une personne peut taper l'un de ces mots comme suit: 56.1.2.3 56.1.2.4 255.255.255.254 56.1.2.7-9 56.5.1.1 à 56.5.1.7. En temps réel, je dois être en mesure de valider chaque entrée comme l'un des cas ci-dessus. Comme matcher n'utilise qu'une regex, je pense avoir besoin d'une seule regex pour regarder autour de moi pendant qu'ils tapent. –
Je ne les ai jamais utilisés, mais est-ce que Tokenizer et Lexer sont la meilleure solution à ce problème ou est-ce qu'il y a quelque chose de plus facile? –