That doesn't look too bad, although you might want to think along the lines of /^[0-9a-fA-F]+$/, which is "$string is a hex number", rather than "$string contains a hex number"
Don't think so much about the e-mail validation - that's a special case, because there are so many levels on which an e-mail address could be valid (valid format for an email address, leads to a valid e-mail box, etc..)
If you want to be rock-solid, you might want to look at the different formats people write hex numbers: I've seen 0a12 written as 0x0a12, 0A12H, and there are probably a few other variations. But, if your code above is good for the data you're processing, then it's great.