PHP регулярное выражение для положительного числа с 0 или 2 десятичными знаками - PullRequest
3 голосов
/ 12 июня 2010

Я пытаюсь использовать следующее регулярное выражение, чтобы проверить, является ли строка положительным числом с нулевыми десятичными знаками или 2:

^\d+(\.(\d{2}))?$

Когда я пытаюсь сопоставить это с помощью preg_match, я получаю ошибку:

Предупреждение: preg_match (): в /Library/WebServer/Documents/lib/forms.php в строке 862

не найден конечный разделитель '^'

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 12 июня 2010

Ошибка из-за отсутствия разделителя, равного / или # и т. Д., Убедитесь, что вы заключили выражение регулярного выражения в разделители:

if (preg_match('/^\d+(\.(\d{2}))?$/', $text))
{
 // more code
 return true;
}

Или:

if (preg_match('#^\d+(\.(\d{2}))?$#', $text))
{
 // more code
 return true;
}
1 голос
/ 12 июня 2010

Для набора функций PHP preg регулярные выражения должны быть указаны с разделителем, например /;например, /[a-z]/ будет соответствовать любому символу от a до z.Когда вы даете ему строку "^\\d+(.(\\d{2}))?$", она хочет обработать регулярное выражение как \\d+(.(\\d{2}))?$, ограниченное ^ с, но не может найти второе ^.Таким образом, исправить это так же просто, как "/^\\d+(.(\\d{2}))?$/" Другая вещь, которую вам нужно исправить, это .;это метасимвол, который будет соответствовать любому не-символу новой строки;на буквальный период, вы хотите \..Это дает вам регулярное выражение "/^\d+(\.(\d{2}))?$/".Также обратите внимание, что если вам не нужна группа захвата, вы можете использовать "/^\d+(?:\.(\d{2}))?$/", в котором цифры после десятичной точки ставятся в $1 вместо $2.

...