126

I've been having some trouble with regular expressions.

This is my code

$pattern = "^([0-9]+)$";

if (preg_match($pattern, $input))
   echo "yes";
else
   echo "nope";

I run it and get:

Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in

shA.t
  • 15,880
  • 5
  • 49
  • 104
fingerman
  • 2,310
  • 4
  • 18
  • 24
  • You can use [T-Regx library](https://github.com/Danon/T-Regx), that doesn't need delimiters. – Danon Oct 09 '18 at 13:54

3 Answers3

194

PHP regex strings need delimiters. Try:

$numpattern="/^([0-9]+)$/";

Also, note that you have a lower case o, not a zero. In addition, if you're just validating, you don't need the capturing group, and can simplify the regex to /^\d+$/.

Example: http://ideone.com/Ec3zh

See also: PHP - Delimiters

Kobi
  • 130,553
  • 41
  • 252
  • 283
  • 3
    For those who do not read linked materials, use `[` and `]` delimiters, otherwise you run into conflicts with the pattern itself. – greenoldman Feb 01 '16 at 13:08
26

Your regex pattern needs to be in delimiters:

$numpattern="/^([0-9]+)$/";
David Powers
  • 1,614
  • 12
  • 11
1

You can use T-Regx library, that doesn't need delimiters

pattern('^([0-9]+)$')->match($input);
Danon
  • 2,190
  • 20
  • 34
  • Why would you use an additional library? Just encase the regex in '/' – MartinNajemi Jun 16 '21 at 12:24
  • @MartinNajemi It's just a suggestion. The first accepted answer suggests enclosing with delimiters "/", and my answer suggests using an alternative. There's no point in posting two similar answers. – Danon Jun 16 '21 at 13:01