tags:

views:

52

answers:

2

hi there,

I am using this: if(!preg_match('/^+[0-9]$/', '+1234567'))

and am getting:

Warning: preg_match() [function.preg-match]: Compilation failed: nothing to repeat at offset 1

any ideas why?


update: Now using this: if(!preg_match('/^\+[0-9]$/', '+1234567'))

and am getting no match.

any ideas why?

+5  A: 

+ is a special character that indicates 1 or more of the previous character, and by not escaping it you are applying it to the caret. escape it with \ and it will match a literal plus sign.

if(!preg_match('/^\+[0-9]$/', '+1234567'))

EDIT:

The reason why it didn't match is because you specified 1 digit from 0-9 and the end of the string with $. You need to make it a variable amount of digits.

if(!preg_match('/^\+[0-9]+$/', '+1234567')) {

Shorter version:

if(!preg_match('/^\+\d+$/', '+1234567')) {
meder
Cheers,Have edited the question now to reflect the current problem.
Hailwood
Hailwood, you shouldn't remove the old problem, but should show both together. (just edited to do that).
Peter Boughton
Also, the current problem is correct behavour - you are asking regex to match a single plus, a single 0..9, then find the end of line position, which your input does not do. To match your supplied input you want either `^\+[0-9]+$` or `^\+[0-9]{7}$` or similar.
Peter Boughton
@peter Thanks, will keep that in mind@meder Cheers, Perfect.i actually know about the d flag, but use [0-9] for personal preference as i think it increases readability at a glance,are there any speed benefits to using the flag vs [0-9]?
Hailwood
+1  A: 

'/^\+[0-9]$/' means that begining of the line has to be plus sign folowed by a number then end of line.

'/^\+[0-9]+$/' means that begining of the line has to be plus sign folowed by a one or more numbers then end of line.

rebus