dafunk dafunk - 2 months ago 5
Ruby Question

about Regular expression2

I need regular expression which could match a string like that

_test
123test
test
test_123
test-123
123.a


and I created this regular expression:

/^[_0-9a-z][_.\-a-z0-9]*$/


but I want to exclude if a string only contains numbers.

How can I fix it?

Answer

To avoid matching a digit-only string, add a negative lookahead:

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

The (?![0-9]+$) lookahead is triggered only once at the beginning of the string and will try to match one or more digits up to the end of string. If they are found, a match will be failed (no match will be returned) as the lookahead is negative.

Comments