سلام
می توانید از توابع mb استفاده کنید.
mb_internal_encoding('utf8');
$data = 'سلام';
for( $i=0; $i < mb_strlen($data); $i++) {
$char = mb_substr($data, $i, 1);
if(preg_match('/^[\x{0600}-\x{06ff}]+$/u', $char)) {
...
}
}
البته توصیه می کنم جدول کاراکترها را ملاحظه کنید و بازه مناسب خود را انتخاب کنید و یا اینکه تک تک کاراکتر های مورد نظر خود را بجای پترن قرار دهید. تا اشتباهی رخ ندهد. در یونیکد همانند اسکی به راحتی نمی توان از عملگرهای کوچکتر بزرگتر استفاده کرد چون ممکن است برخی کاراکتر ها در بازه مورد نظر وجود نداشته باشد مثلا کاراکتر ئ.
با توجه به اینکه تنها قصد دارید کاراکترها را بشمارید می توانید از تابع preg_match_all استفاده کنید.
$data = '111234567890 منستیبمنصثگv ۱۲۳۴۵۶۷۸۹۰ lkjdlk';
echo preg_match_all('/[0-9]/u', $data),'<br/>';
echo preg_match_all('/[۰-۹]/u', $data);