str_replace kerakli narsani qilmaslik

JQuery-ni taqdim etishdan oldin jamuljamlikni hisoblash uchun ishlatadigan formam bor. U jami valyuta belgisi bilan birga ariza ko'rib chiqish skriptiga yuboradi. Bu ba'zi ishlab chiqaradi

Ogohlantirish: Numerik bo'lmagan qiymat duch keldi

shuning uchun men str_replace dan foydalanganman. Biroq, quyidagi kod xatolar ishlab chiqaradi. Bu kodning bir qismidan boshqa hamma joyda ishlaydi va men hal qila olmayman. Kimdir biron bir maslahat bilan yordam berishi mumkin.

function netprice() {
    $vatrate = 1.2;
    $gross = str_replace('£','',$_POST['unit_Price']);
    $net = round(($gross/$vatrate) , 2);

    if (empty($gross)) {
        echo"-";
    }else{
        echo $net;
    }
}
0
Buning ma'nosi PHP-ga yuborilgan formada mavjud bo'lgan <input name = "unit_Price"> (vaziyatga e'tibor bering) degan ma'noni anglatmaydi. Bundan tashqari, siz kelajakdagi konfiguratsiyani bartaraf qilish uchun intval() dan foydalanib, o'zgarmaydiganni tamsayıga kiritishingiz kerak.
qo'shib qo'ydi muallif tyteen4a03, manba
$ _ POST ["unit_Price"] nimani o'z ichiga oladi? var_dump() ni ko'rsating va bizni ko'rsating.
qo'shib qo'ydi muallif Qirel, manba
Xay Qirel. var_dump ushbu satrni ko'rsatadi (0) ""
qo'shib qo'ydi muallif Gareth, manba

6 javoblar

Instead of using str_replacethat could be leaving spaces or other chars, you could use preg_replaceas in the example here Remove non-numeric characters (except periods and commas) from a string

kodingiz shunday bo'ladi:

function netprice() {

$vatrate = 1.2;

$gross = preg_replace("/[^0-9,.]/", "", $_POST['unit_Price']);
$net = round(($gross/$vatrate) , 2);

    if (empty($gross)) {

        echo"-";

    }else{

        echo $net;
    }
}

preg_replace will strip out all chars except for those defined in the first argument.

2
qo'shib qo'ydi

filter_var funktsiyasidan faqat raqamni stringdan olish uchun foydalanishingiz mumkin.

$gross = filter_var($_POST['unit_Price'], FILTER_SANITIZE_NUMBER_INT);

Agar floatlardan foydalanish bo'lsangiz:

$gross = filter_var($_POST['unit_Price'], FILTER_SANITIZE_NUMBER_FLOAT);
2
qo'shib qo'ydi
Bu yaxshi yechim, lekin u butunlay emas, balki float bo'lsa nima bo'ladi?
qo'shib qo'ydi muallif Qirel, manba
Narxlari qiymatlari o'zgarishi mumkin, chunki bu kutilganidek ishlamaydi. Masalan, $ gross = filter_var ('£ 1.2', FILTER_SANITIZE_NUMBER_INT); qaytadi (string) 12
qo'shib qo'ydi muallif aperpen, manba
@Qirel buni javob uchun qo'shing
qo'shib qo'ydi muallif Yaroslav Molchan, manba
@aperpen Men sizning namunangiz uchun javobni tahrir qilaman
qo'shib qo'ydi muallif Yaroslav Molchan, manba
Ushbu turmush o'rtoqqa yoqadi. Men sizning suzingizga javob berishni juda kech olmaguncha ko'rmadim, aks holda bu men tanlagan javob bo'lar edi.
qo'shib qo'ydi muallif Gareth, manba

Siz, albatta, valyuta belgisini forma bilan jo'natmasligingiz kerak. Agar undan qochib qutula olmasangiz, ramz va raqam o'rtasidagi bo'shliq kabi boshqa belgilar bo'lishi mumkin. Birinchidan, natijada floatval() orqali olingan natijani quyidagicha sinab ko'rishingiz mumkin:

$gross = floatval(str_replace('£','',$_POST['unit_Price']));

Agar u hali ham ishlamasa, regexni raqamlar, vergullar va nuqtalardan tashqari har bir belgini ajratish uchun foydalaning:

$gross = floatval(preg_replace('/[^0-9,.]/', '', $_POST['unit_Price']));
1
qo'shib qo'ydi
Bu muhim masala. Pul birligi mijoz tomonidan belgilanmasligi kerak.
qo'shib qo'ydi muallif Ibu, manba
Salomat bo'ling. Yaroslav Molchanning javobiga ko'ra, siz to'g'ridan-to'g'ri kirish o'rniga $ _POST qiymatlarini olish uchun filter_var() dan foydalanishni ham ko'rib chiqishingiz kerak. Chiqarilgan formalardan foydalanish xavfsizlik kamomadi bo'lishi mumkin.
qo'shib qo'ydi muallif Pejka, manba
Bu hiyla-nayrang edi. Bu Pejka uchun rahmat. Va barcha takliflaringiz uchun rahmat. Juda ham minnatdorman :)
qo'shib qo'ydi muallif Gareth, manba
Buni qilamiz. Yana do'stimga rahmat.
qo'shib qo'ydi muallif Gareth, manba

Agar valyuta belgisi qiymatdan oldin bo'lsa, substr dan foydalanishingiz mumkin:

<?php
$price = substr('£1.2', 2); //1.2

Shuni nazarda tutingki £ funktsiyasi maxsus belgidir, chunki siz 2 ta birinchi harfni saralab olishingiz kerak. Var_dumpni tekshirib ko'rishingiz mumkin.

Agar siz valyuta belgisi tugagan bo'lsa, siz shunchaki qiymatni float bo'lishga majbur qilishingiz mumkin:

$price = (float)'1.2£'; //1.2
0
qo'shib qo'ydi

Change £ to £

Also check your output, which data contains $gross after str_replace

0
qo'shib qo'ydi

Barcha yordamchilaringiz uchun tashakkur. Pejkaning qaroriga keldim

$gross = floatval(preg_replace('/[^0-9,.]/', '', $_POST['unit_Price']));

Men sizning yordamingizga juda minnatdorman. Ming rahmat :)

0
qo'shib qo'ydi
PhP |BotsUz
PhP |BotsUz
93 ishtirokchilar

Phpni o'rganishni Hohlasangiz https://t.me/joinchat/AAAAAE-KRc5dd5tPMmGmWA A'zo bo'lin