I'm trying to create a Regex. The rules are:
1) Only letters (both upper and lower), numbers, periods (.) and underscores (_)
2) Must begin and end with letter or number (i.e. no periods/underscores)
3) Cannot have multiple punctuations in a row, of any kind (no .. or ._ or _. or __ or .._. etc)
4) Must contain at least 2 letters (either upper or lower or both, doesn't matter)
5) No less than 3 chars, no more than 25 chars
So far, what I have is:
^((?!.*[\._]{2})[A-Za-z0-9\._]{3,25})$
Which is close-ish. I've got rules 1, 3 and 5, but cannot figure out 2 and 4.
I thought that
(([A-Za-z0-9]?)([A-Za-z0-9\._]+)([A-Za-z0-9]?)){3,25}
would get rule 2, but it just breaks it.
I've been working on this for a couple hours, but none of the solutions I can find, or can come up with, are quite what I'm looking for.
An explanation of the Regex statement you provide would be greatly appreciated, but is not entirely necessary.
EDIT 1
As per noob's suggestion:
^((?!.*[\._]{2})(([\w\d\.]+)){3,25})$
EDIT 2
Valid:
1rockit.man
q3w
e4.45r.d.2
sp_am
(and anything else between 3 and 25 characters, without leading or repeating punctuation)
Invalid:
.ret.
123
12a
ret..wer
super_.duper
_petrat
petrat_