Ваше регулярное выражение интерпретируется PHP как эта строка:
string '/^[\w!"#$%&'()*+,-./:;<=>?@[\]^`{|}~]*$/' (length=40)
(используйте var_dump
на $ regex, и вы получите это)
Прямо в середине вашего регулярного выражения, так что есть косая черта; так как вы используете косую черту для ограничения регулярного выражения (это первый символ $regex
) , PHP считает, что этот слеш в середине обозначает конец регулярного выражения.
Итак, PHP думает, что ваше регулярное выражение на самом деле:
/^[\w!"#$%&'()*+,-./
Каждый символ, который следует после завершающего слеша, интерпретируется как модификаторы .
И ':' не является допустимым модификатором.
Возможно, вы захотите избежать косой черты в середине регулярного выражения ;-)
Как и некоторые другие персонажи, кстати ...
Решением для этого может быть использование функции preg_quote
.