سؤال

ستكون القيم في هذا التنسيق 123-123-123-12345 وأود أن تعمل Preg_Match للعمل. هل تستطيع أن ترى أي شيء خاطئ في هذا Regex؟

foreach($elem as $key=>$value) {

   // Have tried this With and without the + before the $ as well
   if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
      echo "Yeah match Elm: ".$value."<br />"; 
   } else {
      echo "Boo Hoo Elm: '".$value."'<br />";  
   }
}

لقد حاولت أيضا

/^\d{3}\-\d{3}\-\d{3}\-\d{5}+$/

            //With and without the + before the $

انهم جميعا يفشلون مع بوو بو.

تعديل:

var_dump($elem)

array(3) { [0]=>  string(1) "c" [1]=>  string(0) "" [2]=>  string(36) "123-123-123-12345" }
هل كانت مفيدة؟

المحلول

محاولة هذا الرمز:

$value = '123-123-123-12345';

if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
    echo "Yeah match Elm: ".$value."<br />"; 
} else {
    echo "Boo Hoo Elm: '".$value."'<br />";  
}

(لست متأكدا من \ هي مفيدة - ولكن لا يبدو أنها تسبب أي مشكلة، في هذه الحالة بالذات)

انا حصلت :

Yeah match Elm: 123-123-123-12345

ومع هذا:

$value = '123-123-1a-123';

انا حصلت :

Boo Hoo Elm: '123-123-1a-123'

يبدو أن Regex يعمل بالفعل بالنسبة لي؟


هل يمكن أن تقدم رمز أكثر قليلا؟ أو ربما استخدام:

var_dump($elem);

قد يكون مفيدا، للتحقق مما إذا كان يحتوى حقا على ما تتوقعه؟

نصائح أخرى

هل يمكن أن تقدم بعض صفيف الاختبار مع البيانات (ستكون Serialized أفضل) لأنني لا أستطيع إعادة إنتاج هذا السلوك.

$elem = array ('123-123-123-12345');

foreach($elem as $key=>$value) {

   // Have tried this With and without the + before the $ as well
   if(preg_match("/^[0-9]{3}\-[0-9]{3}\-[0-9]{3}\-[0-9]{5}+$/", $value)) {
      echo "Yeah match Elm: ".$value."<br />"; 
   } else {
      echo "Boo Hoo Elm: '".$value."'<br />";  
   }
}

النتيجة: نعم مباراة الدردار: 123-123-123-12345

أيضا الخلفية ليست هناك حاجة في التعبير العادي. يجب أن يتم تشغيل الشرطات فقط في مجموعات [] إذا لم تكن الشخصية الأولى ([-AZ] ستتطابق "- أو AZ"، ولكن [AZ] ستطابق "A OR أو Z").

--- تعديل ---

حسنا، لذلك الشيء الوحيد الذي لا أستطيع أن أفهمه هو الترميز الذي تستخدمه؟

string(36) "123-123-123-12345"

36 بايت ... الأقرب الذي حصلت عليه هو UTF-16، لكن حصلت على 34 بايت فقط. إذن ما هو الترميز الذي تستخدمه؟

يمكنك أيضا محاولة تحويل السلسلة إلى UTF-8 قبل مطابقة مع RegexP. (حاول أيضا استخدام المعلمة "U" في regexp: '/ somreg d / u'، بعد التحويل إلى UTF-8)

استخدام عقارات مزدوجة.

ummmmmm ....

في تحريرك الذي تتحدث عنه صفيف $ وفي حلقة الخاص بك $ elem..

هل يمكن أن تكون هذه هي المشكلة؟

يحرر: بالمناسبة، هناك شيء غريب مع بياناتك، وأعد فقط 17 حرفا، فلماذا يعطي سلسلة (36)؟

غير قادر على النسخ المتماثل. الكود الخاص بك يعمل بشكل جيد عندما لصقها في ملف.

منذ حسابك var_dump() يعرض السلسلة المستهدفة الخاصة بك هي 35 بايت للحصول على سلسلة من 15 حرفا، على الرغم من أنها تبدو وكأنها لديك مشاكل ترميزها. ماذا يحدث إذا قمت بتشغيل Regex ضد utf8_decode($value) بدلا من $value?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top