Вы можете удалить точку из класса символов и при желании повторить ее, добавив точку.
^[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s'-]+(?:\.[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s'-]+)*$
Regex demo
Другой вариант - использовать отрицательный просмотр вперед, чтобы исключить две последовательные точки.
^(?!.*\.\.)[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s'.-]+$
Шаблон действительно содержит \s
, который, возможно, также может соответствовать новой строке. Если вы хотите сопоставить горизонтальные символы пробелов, вы можете изменить его на \h
Я бы предложил использовать предложение else для его проверки, чтобы всегда не отображать эхо "OK"
$value = "test..";
if (!empty($value) && !preg_match("/^(?!.*\.\.)[A-Za-zÀ-ÖØ-öø-ÿĀ-ž\s'.-]+$/", $value, $matches)) {
echo "KO";
} else {
echo "OK";
}
Выход
KO