سؤال
أحتاج CLR Regex عن الكسور أو كلها أرقام الكسور حيث
1/2
هو الصحيح
12 2/3
هو الصحيح أيضا ،
و علامة ناقص يمكن المنبثقة قبل أي عدد.
كنت أول من جاء مع -?([0-9]* )?-?[0-9]+\/-?[0-9]+
ولكن يبدو أن تسمح 2/7 12
أيضا على سبيل المثال.
المحلول
حسنا, هذا regex سيكون في جزأين ، (اختياري) عدد:
(:?-?\d+ )?
و الجزء الكسري:
-?\d+/-?\d+
ونحن بحاجة إلى المباراة كاملة سلسلة ؛ لذلك:
^(:?-?\d+ )?-?\d+/-?\d+$
اختبار قليلا:
PS> $re=[regex]'^(:?-?\d+ )?-?\d+/-?\d+$'
PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{$_ -match $re} | gu
True
ومع ذلك ، فإن هذا يسمح "-12 -2/-3"
وكذلك, أو أشياء مثل "1 -1/2"
التي لا معنى كبير.
ETA: الأصلي regex يعمل أيضا.أنها تفتقر فقط المراسي لتبدأ وتنتهي السلسلة (^
و $
, ، على التوالي).مضيفا تلك التي تجعل من العمل بشكل صحيح.
نصائح أخرى
وكان لي مجرد شرط مماثل، ولكن أردت أن تطابق الأرقام العشرية كذلك. خطرت لي التعبير المعتاد التالي
^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$
وأو مجرد هذا إذا كنت لا تريد المجموعات المسماة
^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$
لإزالة عدد عشري من التحقق من صحة، فإنه سيتم اختصارها إلى
^-?\d+((/\d+)|(\s\d+/\d+))?$
ويساعد هذا الأمل شخص!
وهذه محاولة، مجرد جزء واحد وليس عدد صحيح
/^\d{1}\/?\d{1}$/