I'm looking for some regex pattern to:
- not allow set the same characters
- not allow only special signs.
So:
- 11111111 - not allow
- 1111811111 - allow
- rrrrrrrr - not allow
- rrrrrrrrrr5 - allow
- 11111111% - allow
- %$!@$!@@@@ - not allow
- %%%%%%%%%1 - allow
I found regex which is helpful for recognize that string has only special sign: /^\W*\w.*$/, but I don't know how to join it with condition about not only repeated characters. Thansks for any advices.
CodePudding user response:
You can assert not only the same characters and make sure to match at least a single word character.
^(?!(.)\1 $)[^\w\n]*\w.*$
Explanation
^
Start of string(?!(.)\1 $)
Negative lookahead, assert not only the same characters in the string matching at least 2 characters[^\w\n]*
Optionally match any character except a word character or newline\w
Match at least a single word character.*
Optionally match any character$
End of string
const regex = /^(?!(.)\1 $)[^\w\n]*\w.*$/;
[
"11111111",
"1111811111",
"rrrrrrrr",
"rrrrrrrrrr5",
"11111111%",
"%$!@$!@@@@",
"%%%%%%%%%1",
"a"
].forEach(s => {
if (regex.test(s)) {
console.log(s " allow")
} else {
console.log(s " not allow")
}
});
If you don't want to match any spaces in the string, you can match non whitespace chars using \S
^(?!(\S)\1 $)[^\w\s]*\w\S*$