^ inside [] отрицает characers (меняет значение на «любой символ кроме этих»)
^ за пределами [] означает «начало строки» (так же, как $ означает «конец строки»)
Итак, вам нужно что-то подобное:
("/^[a-z0-9.]+$/",$request)
Если вы хотите исключить последовательности точек, но не отдельных точек, вам нужно что-то более сложное:
preg_match('/^([a-z0-9]|(?<!\\.)\\.)+$/', $request);