2012-04-17 10 views
12

Próbuję uzyskać tę pracę przez chwilę, ale na próżno. Chcę utworzyć regex php aby sprawdzić, czy ciąg ma conajmniej jeden numer i conajmniej jeden z symboli wśród (_- + = * &)"Zakres poza porządkiem w klasie znaków" w PHP regex?

To jest mój regex

$result = preg_match('/^(?=.*\d)(?=.*[_-+=*&]).{3,}$/',$pass); 

otrzymuję następujący błąd Ostrzeżenie: preg_match() [function.preg-match]: Kompilacja nieudana: zakres poza kolejnością w klasie znaków w offsecie 17 w myfile.php na linii 8

Jakaś pomoc?

+3

Dla odniesienia: "regex" jest skrótem od "wyrażenie regularne". Wyrażenie "wyrażenie regex" skrót od "wyrażenie wyrażenia regularnego". :) – cHao

+2

'_- +' jest błędne. Co robi '-' w klasie znaków (' [..] ')? –

+2

Aby dodać następującą uwagę @ pst: '-' w' _- + 'jest 17. znakiem. – sberry

Odpowiedz

24

The - potrzeb należy uciec, lub umieścić na początku/końcu listy [...]:

$result = preg_match('/^(?=.*\d)(?=.*[-_+=*&]).{3,}$/',$pass); 

Jeśli nie, - jest interpretowany jako operator zakresu i jeśli x > y w [x-y] dostać ten błąd.

+0

Uratowałem moje życie. Dzięki. Miłego dnia chłopaki .. Dzięki wszystkim. – zed

+0

@zed: Nie ma za co. :) –