En utilisant Groovy, j'aimerais générer une séquence aléatoire de caractères à partir d'une expression régulière donnée.
[A-Z0-9]
Exemple: A586FT3HS
Cependant, je ne trouve aucun extrait de code susceptible de m'aider. Si l'utilisation d'expressions régulières est trop compliquée, je vais pouvoir définir manuellement le jeu de caractères autorisé.
Si vous ne souhaitez pas utiliser Apache commons ou n'utilisez pas Grails, vous pouvez également:
def generator = { String alphabet, int n ->
new Random().with {
(1..n).collect { alphabet[ nextInt( alphabet.length() ) ] }.join()
}
}
generator( (('A'..'Z')+('0'..'9')).join(), 9 )
mais encore une fois, vous devrez faire votre alphabet
vous-même ... Je ne sais rien qui puisse analyser une expression régulière et extraire un alphabet de caractères de passage ...
import org.Apache.commons.lang.RandomStringUtils
String charset = (('A'..'Z') + ('0'..'9')).join()
Integer length = 9
String randomString = RandomStringUtils.random(length, charset.toCharArray())
La classe RandomStringUtils
importée figure déjà dans le chemin de classe Grails. Vous ne devez donc rien ajouter à ce chemin si vous écrivez une application Grails.
Si vous souhaitez uniquement inclure des caractères alphanumériques dans la chaîne, vous pouvez remplacer ce qui précède par
String randomString = org.Apache.commons.lang.RandomStringUtils.random(9, true, true)
Pour les utilisateurs de SoupUI:
def generator = { String alphabet, int n ->
new Random().with {
(1..n).collect { alphabet[ nextInt( alphabet.length() ) ] }.join()
}
}
randomValue = generator( (('A'..'Z')+('0'..'9')+('a'..'z')).join(), 15 )
testRunner.getTestCase().setPropertyValue("randomNumber", randomValue);
Voici une commande/instruction sur une seule ligne pour générer une chaîne de texte aléatoire
print new Random().with {(1..9).collect {(('a'..'z')).join()[ nextInt((('a'..'z')).join().length())]}.join()}
ou
def randText = print new Random().with {(1..9).collect {(('a'..'z')).join()[ nextInt((('a'..'z')).join().length())]}.join()}
Créez une chaîne avec votre alphabet, alorsdo cette 9 fois:
Ce code est pur Groovy j'ai trouvé sur le web:
def key
def giveMeKey(){
String alphabet = (('A'..'N')+('P'..'Z')+('a'..'k')+('m'..'z')+('2'..'9')).join()
def length = 6
key = new Random().with {
(1..length).collect { alphabet[ nextInt( alphabet.length() ) ] }.join()
}
return key
}
La chaîne de retour est assez bonne pour une utilisation locale:
BFx9PU
MkbRaE
FKvupt
gEwjby
Gk2kK6
uJmzLB
WRJGKL
RnSUQT