آخرین خطای PCRE (preg_last_error)
تابع «preg_last_error» کد خطای آخرین «عبارت باقاعده (RegExp)» را می دهد. یعنی بلافاصله بعد از اجرای توابع regex، می توانی بفهمی چه خطایی رخ داده است. این کار مثل دیدن پیام خطای امتحان نهایی است.
تعریف و کاربرد
تابع preg_last_error() یک کد خطا برمی گرداند. این کد یکی از ثابت های مشخص است. با این کد می توانی وضعیت اجرای الگو را بررسی کنی و پیام مناسب نمایش دهی.
ثابت ها و معنی آن ها
PREG_NO_ERROR: هیچ خطایی رخ نداده است.PREG_INTERNAL_ERROR: ارزیابی الگو خطا داشته است.PREG_BACKTRACK_LIMIT_ERROR: نیاز به backtrack بیش از حد مجاز شده است.PREG_RECURSION_LIMIT_ERROR: عمق بازگشت بیش از حد مجاز شده است.PREG_BAD_UTF8_ERROR: رشته شامل UTF-8 نامعتبر بوده است.PREG_BAD_UTF8_OFFSET_ERROR: offset روی آغاز نویسه چندبایتی نبوده است.PREG_JIT_STACKLIMIT_ERROR: JIT برای ارزیابی با کمبود stack روبه رو شد.
مثال بررسی خطا
- یک الگوی اشتباه تعریف کن.
- الگو را با
preg_matchاجرا کن. - اگر خطا بود، کد خطا را بخوان.
<?php
$str = 'The regular expression is invalid.';
$pattern = '/invalid//';
$match = @preg_match($pattern, $str, $matches);
if ($match === false) {
$err = preg_last_error();
if ($err == PREG_INTERNAL_ERROR) {
echo 'Invalid regular expression.';
}
} else if ($match) {
echo $matches[0];
} else {
echo 'No matches found';
}
?>
نکات کاربردی
- همیشه بلافاصله بعد از فراخوانی regex بررسی کن.
- بر اساس کد خطا، پیام واضح نمایش بده.
- اگر UTF-8 خطا داد، ورودی را بررسی کن.
لینک ها و ادامه مطالعه
برای فیلتر کردن، preg_filter را ببین. برای جستجو در آرایه، preg_grep را بررسی کن. همچنین صفحه آخرین خطای PCRE مرجع همین مبحث است.
جمع بندی سریع
- preg_last_error کد خطا را می دهد.
- بلافاصله بعد از اجرای regex بررسی کن.
- پیام مناسب بر اساس ثابت ها بساز.
- خطاهای UTF-8 را جدی بگیر.