How to implement a regex for password validation in Swift?
Solution 1
The regex is
(?:(?:(?=.*?[0-9])(?=.*?[-!@#$%&*ˆ+=_])|(?:(?=.*?[0-9])|(?=.*?[A-Z])|(?=.*?[-!@#$%&*ˆ+=_])))|(?=.*?[a-z])(?=.*?[0-9])(?=.*?[-!@#$%&*ˆ+=_]))[A-Za-z0-9-!@#$%&*ˆ+=_]{6,15}
Solution 2
You can use Regex for check your password strength
^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$
Regex Explanation : -
^ Start anchor
(?=.*[A-Z].*[A-Z]) Ensure string has two uppercase letters.
(?=.*[!@#$&*]) Ensure string has one special case letter.
(?=.*[0-9].*[0-9]) Ensure string has two digits.
(?=.*[a-z].*[a-z].*[a-z]) Ensure string has three lowercase letters.
.{8} Ensure string is of length 8.
$ End anchor.
Source - Rublar Link
Solution 3
try with this one for Password must be more than 6 characters, with at least one capital, numeric or special character
^.*(?=.{6,})(?=.*[A-Z])(?=.*[a-zA-Z])(?=.*\\d)|(?=.*[!#$%&? "]).*$
^ assert position at start of the string
.* matches any character (except newline)
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
(?=.{6,}) Positive Lookahead - Assert that the regex below can be matched
.{6,} matches any character (except newline)
Quantifier: {6,} Between 6 and unlimited times, as many times as possible, giving back as needed [greedy]
(?=.*[A-Z]) Positive Lookahead - Assert that the regex below can be matched
.* matches any character (except newline)
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
[A-Z] match a single character present in the list below
A-Z a single character in the range between A and Z (case sensitive)
(?=.*[a-zA-Z]) Positive Lookahead - Assert that the regex below can be matched
.* matches any character (except newline)
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
[a-zA-Z] match a single character present in the list below
a-z a single character in the range between a and z (case sensitive)
A-Z a single character in the range between A and Z (case sensitive)
(?=.*\\d) Positive Lookahead - Assert that the regex below can be matched
.* matches any character (except newline)
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
\d match a digit [0-9]
2nd Alternative: (?=.*[!#$%&? "]).*$
(?=.*[!#$%&? "]) Positive Lookahead - Assert that the regex below can be matched
.* matches any character (except newline)
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
[!#$%&? "] match a single character present in the list below
!#$%&? " a single character in the list !#$%&? " literally (case sensitive)
.* matches any character (except newline)
Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy]
$ assert position at end of the string
https://regex101.com/#javascript
more this you can try ....
Minimum 8 characters at least 1 Alphabet and 1 Number:
"^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$"
Minimum 8 characters at least 1 Alphabet, 1 Number and 1 Special Character:
"^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"
Minimum 8 characters at least 1 Uppercase Alphabet, 1 Lowercase Alphabet and 1 Number:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,}$"
Minimum 8 characters at least 1 Uppercase Alphabet, 1 Lowercase Alphabet, 1 Number and 1 Special Character:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[d$@$!%*?&#])[A-Za-z\\dd$@$!%*?&#]{8,}"
Minimum 8 and Maximum 10 characters at least 1 Uppercase Alphabet, 1 Lowercase Alphabet, 1 Number and 1 Special Character:
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&#])[A-Za-z\\d$@$!%*?&#]{8,10}"
Solution 4
public func isValidPassword() -> Bool {
let passwordRegex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z!@#$%^&*()\\-_=+{}|?>.<,:;~`’]{8,}$"
return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: self)
}
If you need a quick fix. This is validation for a password with regex. Copy/paste in helper or extension file and use it.
Solution 5
func isValidPassword() -> Bool {
// least one uppercase,
// least one digit
// least one lowercase
// least one symbol
// min 8 characters total
let password = self.trimmingCharacters(in: CharacterSet.whitespaces)
let passwordRegx = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&<>*~:`-]).{8,}$"
let passwordCheck = NSPredicate(format: "SELF MATCHES %@",passwordRegx)
return passwordCheck.evaluate(with: password)
}
for which missing validation:
func getMissingValidation(str: String) -> [String] {
var errors: [String] = []
if(!NSPredicate(format:"SELF MATCHES %@", ".*[A-Z]+.*").evaluate(with: str)){
errors.append("least one uppercase")
}
if(!NSPredicate(format:"SELF MATCHES %@", ".*[0-9]+.*").evaluate(with: str)){
errors.append("least one digit")
}
if(!NSPredicate(format:"SELF MATCHES %@", ".*[!&^%$#@()/]+.*").evaluate(with: str)){
errors.append("least one symbol")
}
if(!NSPredicate(format:"SELF MATCHES %@", ".*[a-z]+.*").evaluate(with: str)){
errors.append("least one lowercase")
}
if(str.count < 8){
errors.append("min 8 characters total")
}
return errors
}
Vaibhav Jhaveri
Updated on May 05, 2021Comments
-
Vaibhav Jhaveri about 3 years
I want to implement a regex validaton for passwords in Swift? I have tried the following regex, but not successful
([(0-9)(A-Z)(!@#$%ˆ&*+-=<>)]+)([a-z]*){6,15}
My requirement is as follows: Password must be more than 6 characters, with at least one capital, numeric or special character
-
Vaibhav Jhaveri over 7 yearsWhat about this : Password must be more than 6 characters, with at least one capital, numeric or special character
-
Nazmul Hasan over 7 years^.*(?=.{6,})(?=.*[A-Z])(?=.*[a-zA-Z])(?=.*\d)|(?=.*[!#$%&? "]).*$
-
Wiktor Stribiżew about 6 yearsThe
-
inside a character class creates a range, you should escape it. I have edited the answer. -
Sujal over 5 yearsThe explanation is helpful to better understand and hence create desired regular expression.
-
Hardik Thakkar over 5 yearsIt is more useful if you provide short info about above Regex.
-
Tosin Onikute over 5 years@HardikThakkar You can always Google it bro!
-
Hardik Thakkar over 5 years@Html Tosin comment is for -Psajho Nub, not for you bro. With more details user who see answer can understand what will be the result of above answer.
-
tBug over 5 years@HtmlTosin I provide an answer that is working if you wont to fully understand, pls google everything about regex. Everything is self-explanatory except regex. Here is a link for more learning : regexr.com Tnx guys :)
-
Keyur Tailor about 5 yearsWhat is the significance of string in square brackets before range in all these regex? We don't provide these square brackets in javascript regex.
-
Mohsin Khubaib Ahmed about 5 years+~`^-_= are also special characters but are not being entertained in these expressions as Alphanumeric characters
-
Hardik Darji about 4 yearsnice explanation
-
Sandeep Maurya almost 4 yearsit fails for @Abc12345678
-
mshrestha almost 4 yearshow about at least one uppercase, one numeric and no special character? @NazmulHasan
-
Bartłomiej Semańczyk over 3 yearsyou are awesome;)
-
Ximena Flores de la Tijera over 2 yearsIs there a way to know which validation is missing and return set error?
-
Pintu Rajput about 2 yearsI need same validation but different cases, so that find which validation is missing
-
Yuyutsu about 2 years@XimenaFloresdelaTijera @PintuRajput added the
getMissingValidation
function