preg_replace все нецифровые символы кроме + в начале строки - PullRequest
3 голосов
/ 27 марта 2012

Предполагая входную строку +123-321+123 345, используя функции регулярного выражения PHP, я хотел бы удалить все нецифровые ([^\d]) символы, кроме символа + в начале. + может присутствовать или не присутствовать, поэтому, учитывая строку 123-321+123 345, результат должен быть одинаковым (123321123345).

В настоящее время обходной путь заключается в проверке +, затем запустите preg_replace('/[^\d]+/', '', $string), но я уверен, что для этой проблемы должно быть чисто регулярное решение.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 27 марта 2012

Попробуйте это

/(?<!^)\D|^[^+\d]/

\D - это то же самое, что [^\d]

(?<!^) - это отрицательный взгляд назад, который гарантирует отсутствие начала строки передне цифра.

Это выражение будет соответствовать всем не цифрам, которые не являются началом строки.

preg_replace('/(?<!^)\D|^[^+\d]/', '', $string)
0 голосов
/ 27 марта 2012

Используйте позитивный взгляд назад.

preg_replace('/(?<=\d)[^\d]+/', '', $string)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...