If only two characters are doggy and period, then so
preg_match("/^[a-zA-Z0-9@.]+$/", $string)
do not need to shield the point inside the square brackets.
If you need Cyrillic support, then you can
preg_match("/^[a-zA-Z0-9А-Яа-я]+$/", $string)
But most likely it will not work. (all tied to unicode). Then, with a high probability, the checkbox /u will help:
preg_match("/^[a-zA-Z0-9А-Яа-я]+$/u", $string)
But there is one subtlety yet. The string from the browser can come for example in cp1251, and on the server the scripts are in utf-8 or koi. And regulars with Cyrillic will not work (or will, but "unexpectedly" and incorrectly). Recommendation - translate everything into one encoding.