PHP preg_match Matematik Fonksiyonu

4 Cevap php

Ben daha sonra değerlendirilmek üzere, giriş için bir kullanıcı bir matematik ifadesi olan bir dize sağlayacak bir senaryo yazıyorum. Ben ancak bir barikat vurdu. Ben onları değişkenleri sahip deyimleri dissallow için, preg_match kullanarak nasıl, bilemiyorum.

Bunu kullanarak, $calc = create_function("", "return (" . $string . ");" ); $calc();, değerlendirmeye alınacaktır girişine kullanıcıların bir dize verir, ama bir şey gibi echo 'foo'; $string değişken yerine koymak ne zaman çöker.

I this post gördüm, ama bu tür $string = 'sin(45)'; olarak dize içinde matematik işlevleri için izin vermez.

4 Cevap

Postfix gösterimine infix dönüştürmek için, ve iddiaların değişen sayıda fonksiyonları desteği ile, PHPExcel hesaplama motoru için kaynak bakabilirsiniz Djikstra en şant bahçesinde algoritması kullanır PHP uygulanan bir yığın tabanlı çözümleyici için (ve hangi eval kullanmak değildir)

Ayrıca this question için cevaplara bir göz

Eğer izin nasıl karmaşık bir matematik fonksiyonu gerekiyor? Eğer sadece temel matematik gerekiyorsa, o zaman sadece izin boşlukla + karakterleri 0123456789.+/-* ya da bazı tür ile kurtulmak mümkün olabilir.

Genel olarak, ancak, sadece matematik yapmak için dilin eval-tipi yeteneklerini kullanarak muhtemelen kötü bir fikirdir.

Gibi bir şey:

^([\d\(\)\+\-*/ ,.]|sin\(|cos\(|sqrt\(|...)+$

sadece sayıları, dirsekleri, matematik İşlemleri ve sağlanan matematik fonksiyonlarını sağlayacak. Ama sağlanan ifadesidir geçerli olup olmadığını kontrol edin, bu yüzden bir şey +++sin()))333((( hala kabul edileceği gibi olmayacaktır.

Ben bu class size yardımcı olacaktır acaba? "php math expressions" için Google'da arama yaparken bulundu.