-1
votes

En Java, comment puis-je vérifier si une chaîne est composée de lettres et de chiffres, mais uniquement des lettres et des chiffres?

J'ai essayé ceci: xxx

mais l'entrée 123f45 ne fixe toujours pas le jeton en valide car je pensais qu'il serait


2 commentaires

Pourquoi penseriez-vous que les minuscules F correspondent à une regex qui permet uniquement des lettres majuscules? Soit ajouter des lettres minuscules aux classes de caractères (par exemple [a-za-z] ), ou dites-le de correspondre à une insensibilité à casse, par exemple. Ajouter (? i) au début.


Je vais parier que jetken.valid est faux par défaut. Ensuite, lorsque vous appelez IsletTerandnumbercombo , jeton.valid ne sera jamais vrai, même si votre expression régulière est correcte. Fondamentalement, n'oubliez pas d'ajouter une branche ou de stocker si le contenu est valide dans une variable iscontentsvalid et appelez jeton.sevalid (iscontentsvalid) .


4 Réponses :


1
votes

Donnez ceci un whirl xxx

vous récupérerez true ou false si le jeton est valide.


1 commentaires

"Si une chaîne consiste en lettres et chiffres" Cette réponse ne vérifie pas qu'au moins une de chaque (lettre vs nombre) est présente.



2
votes

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]+


3 commentaires

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 () .



0
votes

J'irais avec:

^[A-Za-z\d]*(([A-Za-z]\d)|(\d[A-Za-z]))[A-Za-z\d]*$


1 commentaires

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 , 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 ).



-1
votes

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]+"));
}


1 commentaires

Cela ne s'assure pas qu'il se compose de lettres et de chiffres. Et vous avez oublié de vérifier si jeton est null.