Учитывая строку и регулярное выражение, как я могу убедиться, что он соответствует всей строке? То есть, я не хочу, чтобы новая строка запускала конец совпадения - я хочу, чтобы она соответствовала самому концу строки.
Пример:
<?php
// simplified date pattern
$pattern = "/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/";
$d = "2014-01-05\n"; // OOPS - this will match
if(preg_match($pattern, $d)) {
echo "This is a date string.";
}
Используйте модификатор D
:
D (PCRE_DOLLAR_ENDONLY)
Если этот модификатор установлен, метасимвол доллара в шаблоне соответствует только в конце строки темы. Без этого модификатора доллар также соответствует непосредственно перед конечным символом, если он является символом новой строки (но не раньше любых других строк перевода).
$pattern = "/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/D";
Вам нужно будет использовать многострочный шаблонный модификатор m
следующим образом:
$pattern = "/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/m"; // note m at end after pattern
trim
его?