I have a couple of tips for you.
Use the slashes / / to encapsulate the regular expression.
You might wonder why? Well one of these days you'll be scratching your head when $regex(a,moo) gives 1. If you want to know why it matches, let me know.
U can use the i modifier so that the pattern is case insensitive, so that you can shorten the initial [a-zA-Z] to simply [a-z] (or another variation of that). The expression would be something like /<pattern>/i
Or if you want only a part of the pattern to be case insensitive you can use the modifiers like this:
(?<modifiers>)
Example: /foo(?i)bar(?-i)s/
Both the foo and s are case sensitive, which means they will only match in that exact representation, so not on mOo etc. bar is however case insensitive, so matches BAR, bAR, etc.
You can set and unset multiple in one assignment like: /foo(?iS)bar(Ux-iS) s+/
I won't go into detail about all the meanings of the different modifiers.
You could replace [0-9] with \d, however this is a personal preference, and some might prefer it for easier understanding.
Finally you can use the quantifier {<N>[,N]} to specify how many times you want something to match.
2 or more digits would be: \d{2,}
Of course what you did, being \d\d+, or \d\d\d* etc. are just as good.
In mIRC, commas are the delimiters in an identifier, so the possible comma used in {N,N} would screw up the regex, but we can work around that by putting the expression in brackets (whether that be capturing, uncapturing, lookaround, etc.), then mIRC treats it as part of the pattern, and not as an identifier delimiter.
Example: /^moo(?:\d{2,5})$/
Note that those tips are not necessarily aimed at you, they might come in handy for anyone taking the first steps in regex.
Greets