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.
>Solution :
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*$