2017-08-30 1 views
1

J'écris une fonction Azure qui est en langage C#. Maintenant, je veux générer un mot de passe qui en contient un (minuscule, majuscule, nombre et caractère spécial donné).Regex pour en inclure un (minuscule, majuscule, nombre, caractères spéciaux donnés) dans la fonction C# Azure

J'utilise Fare en fonction Azure pour C#

fonction Azure: -

using Fare; 

var [email protected]"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#[email protected]!%&*?])[A-Za-z\d#[email protected]!%&*?]{8,30}$/"; 

var xeger = new Xeger(regex); 
var result = xeger.Generate(); 
log.Info("result" + result); 

Erreur: -

2017-08-30T10:20:12.045 exceptionSystem.InvalidOperationException: state 
    at Fare.Xeger.Generate(StringBuilder builder, State state) 
    at Fare.Xeger.Generate() 
    at Submission#0.<Run>d__1.MoveNext() in D:\home\site\wwwroot\HttpTriggerCSharp1\run.csx:line 13 

2017-08-30T10:03:28.989 Exception while executing function: Functions.HttpTriggerCSharp1. Microsoft.Azure.WebJobs.Script: One or more errors occurred. Fare: state. 

Erreur sur la ligne n ° 13 est var = regex ...

Veuillez m'aider à résoudre ce problème.

+0

Quel type de motif (pour lequel le moteur regex) fait le Xeger Acceptez? Votre pattern contient des lookaheads, je pense que ceux-ci ne sont pas supportés. Essayez 'var regex = @"^[A-Za-z \ d # $ @!% & *?] {8,30} $ ";', génère-t-il les résultats comme prévu? –

+0

* Une ou plusieurs erreurs sont survenues * Alors, quelles étaient les erreurs? L'exception a-t-elle des exceptions internes? – DavidG

+0

@DavidG Je vois une ou plusieurs erreurs seulement. – karan

Répondre

2

L'exception provient de cette partie [A-Za-z\d#[email protected]!%&*?] que les caractères après \d font exceptions. il suffit de le changer en 0-9 si vous voulez faire correspondre un chiffre; quelque chose comme: [A-Za-z0-9#[email protected]!%&*?] ou en le déplaçant pour finir comme [A-Za-z#[email protected]!%&*?\d].
Mais votre complexe regex résultera après un long moment;).

Note: There are some rare results of using \d inside [..] ;).

Une meilleure regex pour votre besoin, je pense que peut-être quelque chose comme ceci:

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[#[email protected]!%&*?]).{8,} 

Explication:

(?=.*\d)   => there is at least one digit 
(?=.*[a-z])  => there is at least one lowercase character 
(?=.*[A-Z])  => there is at least one uppercase character 
(?=.*[#[email protected]!%&*?]) => there is at least one special character 
.{8,}    => length is 8 or more 
+0

Je reçois la sortie sous la forme 5; ⊳2 侢 실 詼 ಥ꣭ & 갇 ㈶ਝ 莂 2 ༜ 쬚 㻥 7 <貒 4 = ב 铦 ב 6 몴 D 今 퓡 粢 䲉 lUᖚ == ijJ ꐈ Ɥp 엹귿 O 괭 v 猙 kX 㙶 ꁾ ujI 졩 䝮 漂 䤫 j = K ꄢ 疉 YL = @ ቻ 曪 ߍ℻ 艹 Ꜽ – karan

+0

Donc votre exception a été résolue! –

+0

oui. exception résolue. J'ai besoin d'une chaîne de mot de passe basée sur regex, mais j'obtiens des caractères invalides comme mentionné précédemment. – karan