VInayK
VInayK

Reputation: 1559

Regular Expression to validate the field: field must contain atleast 2 AlphaNumeric characters

I need to validate VARCHAR field. conditions are: field must contain atleast 2 AlphaNumeric characters

so please any one give the Regular Expression for the above conditions

i wrote below Expression but it will check atleast 2 letters are alphanumeric. and if my input will have other than alphanumeric it is nt validating.

'^[a-zA-Z0-9]{2,}$'

please help.........

Upvotes: 3

Views: 3943

Answers (5)

Kobi
Kobi

Reputation: 138137

In response to a comment, here's a performance comparison for the greedy [a-zA-Z0-9].*[a-zA-Z0-9] and the non-greedy [a-zA-Z0-9].*?[a-zA-Z0-9].

The greedy version will find the first alphanumeric, match all the way to the end, and backtrack to the last alphanumeric, finding the longest possible match. For a long string, it is the slowest version. The non greedy version finds the first alphanumeric, and tries not to match the following symbols until another alphanumeric is found (that is, for every letter it matches the empty string, tries to match [a-zA-Z0-9], fails, and matches .).

Benchmarking (empirical results):
In case the alphanumeric are very far away, the greedy version is faster (even faster than Gumbo's version).
In case the alphanumerics are close to each other, the greedy version is significantly slower.

The test: http://jsbin.com/eletu/4
Compares 3 versions:

[a-zA-Z0-9].*?[a-zA-Z0-9]
[a-zA-Z0-9][^a-zA-Z0-9]*[a-zA-Z0-9]
[a-zA-Z0-9].*[a-zA-Z0-9]

Conclusion: none. As always, you should check against typical data.

Upvotes: 0

jensgram
jensgram

Reputation: 31518

[a-zA-Z0-9].*[a-zA-Z0-9]

The easy way: At least two alnum's anywhere in the string.


Answer to comments
I never did (nor intended to do) any benchmarking. Therefore - and given that we know nothing of OP's environment - I am not one to judge whether a non-greedy version ([a-zA-Z0-9].*?[a-zA-Z0-9]) will be more efficient. I do believe, however, that the performance impact is totally negligible :)

Upvotes: 6

Greg Bacon
Greg Bacon

Reputation: 139701

How broad is your definition of alphanumeric? For US ASCII, see the answers above. For a more cosmopolitan view, use one of

[[:alnum:]].*[[:alnum:]]

or

[^\W_].*[^\W_]

The latter works because \w matches a "word character," alphanumerics and underscore. Use a double-negative to exclude the underscore: "not not-a-word-character and not underscore."

Upvotes: 1

Gumbo
Gumbo

Reputation: 655765

I would probably use this regular expression:

[a-zA-Z0-9][^a-zA-Z0-9]*[a-zA-Z0-9]

Upvotes: 2

Paul Creasey
Paul Creasey

Reputation: 28884

As simple as

'\w.*\w'

Upvotes: 0

Related Questions