سؤال

أحاول العثور على قطعة من التعبير العادي لمطابقة قيمة العملة.

أرغب في مطابقة الأرقام والفاصلة العشرية الواحدة فقط، على سبيل المثال

مسموح

  • 10
  • 100
  • 100.00

غير مسموح

  • شخصيات ألفا
  • 100,00
  • +/- 100

لقد قمت بالبحث وحاولت عددًا لا بأس به من دون أي حظ.

نأمل أن تتمكن من تقديم المشورة

هل كانت مفيدة؟

المحلول

if (preg_match('/^[0-9]+(?:\.[0-9]+)?$/', $subject))
{
    # Successful match
}
else
{
    # Match attempt failed
}

ملاحظة جانبية :إذا كنت تريد تحديد عدد المنازل العشرية التي تريدها، فيمكنك القيام بشيء مثل هذا:

/^[0-9]+(?:\.[0-9]{1,3})?$/im

لذا

100.000

سوف تتطابق، في حين

100.0001

متعود.

إذا كنت بحاجة إلى أي مساعدة إضافية، قم بنشر تعليق.

ملاحظة إذا أمكن، استخدم منسق الأرقام المذكور أعلاه.تعد الوظائف الأصلية دائمًا أفضل (وأسرع)، وإلا فإن هذا الحل سوف يخدمك جيدًا.

نصائح أخرى

وماذا عن هذا

if (preg_match('/^\d+(\.\d{2})?$/', $subject))
{
   // correct currency format
} else {
  //invalid currency format
}

قد ترغب في التفكير في بدائل أخرى لاستخدام التعبير العادي.

على سبيل المثال، هناك NumberFormatter فئة توفر رقمًا وعملة مرنة تفسير و التنسيق, ، مع بناء في دعم التدويل.

إنه مدمج في PHP 5.3 والإصدارات الأحدث، وهو متاح كامتداد للإصدارات السابقة من PHP 5.

جرب هذا التعبير العادي:

^(?:[1-9]\d+|\d)(?:\.\d\d)?$
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top