Boost logo

Boost Users :

From: Timothy H. Schilbach (tschilbach_at_[hidden])
Date: 2004-11-10 15:53:21


Hi Everyone,
 
  I have just started using BOOST in my C++ cosing projects as I am a newbie to C++ but very experienced in many other languages. I Needed to write some DLLs for Windows that would allow me to validate the complexity of porposed passwords. I have gotten a simple application togeather and it works very well at this time. The only issue I have is that it isnt validating a match correctly when I use certain RexEx expressions.
 
For example:
 
This expression: ^([a-zA-Z]+)(\d+)([a-zA-Z]+)$ validates strings that start with a character have a digit and then end with a character.
 
  This is great and works very well at this time. Now I go to something a bit more complex. I want to validate a new password a user sets and it has to conform to 2 of the following 4 rules:
 
1. Have uppercase letter
2. Have lower case letter
3. Have 0-9
4. Have a special character !@#$%^&*
 
  This RegExs Expression works very well in my other applications written in C# (DOTNET REGex) and also works very well in PERL applications too: (?=\w*[a-z])(?=\w*[A-Z])|(?=\w*\d)(?=\w*[a-z])|(?=\w*[a-z])(?=\w*\d)|(?=\w*[a-z])(?=.*[@#$%^&])|(?=\w*\d)(?=\w*[A-Z])|(?=\w*[A-Z])(?=.*[@#$%^&])|(?=\w*\d)(?=.*[@#$%^&])
 
  Ok I know its a doosy, but I works great everywhere except the application I am running BOOST with. I keep the expression in a registry key so I can edit easily instead of recompiling the DLL if I want to change the RegEx. Here is the code I am using in my C++ project and its failing to validate passwords that match the policies:
 
// Validate password against regular expression

wregex wrePassword(DEFAULT_REGEX);

WriteToLog("Going to retrieve RegEx from Registry");

GetPasswordRegExFromRegistry(wrePassword);

WriteToLog("Going to run match");

// Prepare iterators

wstring::const_iterator start = wstrPassword.begin();

wstring::const_iterator end = wstrPassword.end();

match_results<wstring::const_iterator> what;

unsigned int flags = match_default;

bMatch = regex_match(start, end, what, wrePassword);

  If all is working corectly the following passwords should pass the RegEx expression I have posted above (it works fiune in PERL or C#/VB.NET):

Password
Password1
password1
p_at_ssword

  Any of those should work just fine and they dont. Anyone able to hep me with this one? Your help is greatly appreciated. I just cant figgure out why a syntax I use in PERL or C#/VB.NET works great but wont work in BOOST.

-Timothy

 
 



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net