Als we even kijken naar het eerste deel van je pattern:
([a-zA-Z0-9_-])@
Hier zijn twee dingen mis. Ten eerste match je hier op maar 1 karakter. Een adres als [email protected] zou dus wel moeten matchen.
Ten tweede gebruik je eregi. Die matcht case insensitive, dus het is niet nodig om in je pattern zowel a-z als A-Z op te geven.
Ten derde (ja, ik kan niet tellen ;-) ) matcht een . op elk willekeurig karakter. Als je wilt matchen op een echte . zul je die moeten escapen met een backslash.
Met deze informatie in het achterhoofd kunnen we je code als volgt herschrijven:
Dit zou een stuk beter moeten werken, alhoewel bijvoorbeeld de domeinen .info, .aero en .museum hier zouden worden geweigerd, terwijl die wel degelijk correct zijn.
Het matchen van een email-adres is overigens niet heel erg eenvoudig. Als je alle adressen wilt accepteren die toegestaan zijn volgens RFC-822 wordt je regexp is iets van 6,5 kilobyte groot.