Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex not to allow double underscores

Tags:

regex

Trying to apply regex for not allowing a string with double underscores

 [a-z][a-z0-9_-]+[^__]

but its failing in many cases like:

ab_      doesn't matches whereas it should
ab__c_   matches whereas it shouldn't.
like image 296
Usman Avatar asked Sep 12 '12 08:09

Usman


2 Answers

[^__] matches one character that is not underscore. To assert that your string doesn't have two consecutive underscores, you could use a negative lookahead:

^(?!.*__.*)[a-z][a-z0-9_-]+$

The lookaround asserts that your string does not have two consecutive underscores (?!.*__.*), and then matches your required string if the assertion does not fail -- [a-z][a-z0-9_-]+.

like image 65
João Silva Avatar answered Nov 11 '22 19:11

João Silva


the [^] syntax defines a set of characters so that it matches a character not present in this set

if you want to match two characters that are not underscores you can use [^_]{2}

but if you really want to check if a string has two underscores, you better search for two underscores and negate the result

for example in perl: "ab_" !~ /__/

like image 24
Hachi Avatar answered Nov 11 '22 19:11

Hachi