J'ai essayé ceci: mais l'entrée 123f45 ne fixe toujours pas le jeton en valide car je pensais qu'il serait p> p>
4 Réponses :
Donnez ceci un whirl vous récupérerez true ou false si le jeton est valide. p> p>
"Si une chaîne consiste en B> lettres et chiffres" i> Cette réponse ne vérifie pas qu'au moins une de chaque (lettre vs nombre) est présente.
Votre solution va bien. Il vous suffit d'ajouter le drapeau insensible au cas ( (? I) code>) pour correspondre aux lettres minuscules. Et correspondances () code> recherche une correspondance complète, vous n'avez donc pas besoin des ancrages au début et à la fin: (?i)(?=.*[A-Z])(?=.*[0-9])[A-Z0-9]+
N'est-ce pas exactement ce que OP va déjà (en utilisant des lunettes de vue)?
Le problème est la sensibilité cas, comme je l'ai mentionné dans un Comment .
Droite. Et les ancrages sont inutiles lorsque vous utilisez correspondant () code>.
J'irais avec:
^[A-Za-z\d]*(([A-Za-z]\d)|(\d[A-Za-z]))[A-Za-z\d]*$
Pourquoi est-ce mieux que ce que OP a essayé? Cela ne fonctionne pas beaucoup mieux, alors ce n'est pas ça. Bien sûr, il corrige le problème de sensibilité de cas en ajoutant az code>, mais vous pouvez également le faire à OP Regex et vous n'avez même pas expliqué que c'était le problème principal (comme je l'ai fait dans un < Un href = "https://stackoverflow.com/questions/54245951/in-java-how-do-i-check-if-a-string-consists-fs-both-treetters-and-numbers-but-on# Commentaire95316493_54245951 "> Comment ).
Une simple regex ferait le travail:
Changez votre fonction à: p>
private static void isLetterandNumberCombo(Tokens token) {
token.setValid(token.getContents() != null && token.getContents().matches("[a-zA-Z0-9]+"));
}
Cela ne s'assure pas qu'il se compose de lettres et de chiffres. Et vous avez oublié de vérifier si jeton code> est null.
Pourquoi penseriez-vous que les minuscules
F code> correspondent à une regex qui permet uniquement des lettres majuscules? Soit ajouter des lettres minuscules aux classes de caractères (par exemple[a-za-z] code>), ou dites-le de correspondre à une insensibilité à casse, par exemple. Ajouter(? i) code>au début.Je vais parier que
jetken.valid code> est faux par défaut. Ensuite, lorsque vous appelezIsletTerandnumbercombo code>,jeton.valid code> ne sera jamais vrai, même si votre expression régulière est correcte. Fondamentalement, n'oubliez pas d'ajouter une branche code> code> ou de stocker si le contenu est valide dans une variableiscontentsvalid code> et appelezjeton.sevalid (iscontentsvalid) code>.