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_
shorthandoperators like\wand\d. Easier to comprehend.\walso include_so that's covered.1rockit.manande4.45r.d.2are invalid according to condition 2. Cannot begin or end with non-letter/number. You might wanna check again the given condition or the example.non-letter/numberseems to be confusing.