I am currently writing a small script that checks the contents of each string.
I was wondering what the REGEX would be to make sure that a string has a letter (upper or lower), a digit, and a special character?
Here is what I know so far (whcih isn't much):
if(preg_match('/^[a-zA-Z0-9]+$/i', $string)):
Help would be great!
Thank You!
You can use positive lookahead to create a single regex:
A letter is
\pL
, a number is\pN
and a special char is[what you want]
, here I assume it is not a letter and not a number, so the regex looks like:False (chosen answer above - Thanks!) had the a pretty easy way to wrap your head around it (if you aren't too familiar with regex) and come up with what works for you.
I just put this in to elaborate a bit:
(you can paste it at http://phptester.net/index.php?lang=en to work with it)
I have found great answer here with explanation to make sure that a given string contains at least one character from each of the following categories.
Lowercase character, Uppercase character, Digit, Symbol
A short explanation:
^
// the start of the string(?=.*[a-z])
// use positive look ahead to see if at least one lower case letter exists(?=.*[A-Z])
// use positive look ahead to see if at least one upper case letter exists(?=.*\d)
// use positive look ahead to see if at least one digit exists(?=.*[_\W])
// use positive look ahead to see if at least one underscore or non-word character exists.+
// gobble up the entire string$
// the end of the stringHope that help you.
The easiest (and probably best) way is to do three separate checks with
preg_match
:It may be best to use 3 distinct regexs to do this, since you would need to match 6 different possibilities, depending on where your special characters are in your string. But if you want to do it in one regex, and your special characters are, say, [+?@], it is possible: