Saya ingin mengekstrak angka dari string yang berisi angka dan huruf seperti:
"In My Cart : 11 items"
Saya ingin mendapatkan nomor ini 11atau nomor lainnya di sini.
Saya ingin mengekstrak angka dari string yang berisi angka dan huruf seperti:
"In My Cart : 11 items"
Saya ingin mendapatkan nomor ini 11atau nomor lainnya di sini.
Jawaban:
$str = 'In My Cart : 11 12 items';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
$newstr = preg_replace('!\d+!', '', $str);. Ini akan menghapus semua digit dari string Anda. Contoh: $str = 'In My Cart : 11 12 items';akan ditampilkan In My Cart : items.
preg_replace("/[^0-9]/","",$string);ataufilter_var($str, FILTER_SANITIZE_NUMBER_INT);
filter_var($str, FILTER_SANITIZE_NUMBER_INT);mengekstraksi angka, tanda tambah dan minus . Regex hanya mengekstraksi digit!
Jika Anda hanya ingin memfilter segala sesuatu selain nomor yang keluar, cara termudah adalah menggunakan filter_var :
$str = 'In My Cart : 11 items';
$int = (int) filter_var($str, FILTER_SANITIZE_NUMBER_INT);
xxx-yyy-24Anda akan mendapatkannya --24. Anda dapat menggunakan str_repleace(array('+','-'), '', $result)untuk menghapus kedua tanda.
max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))dengan menggunakan array dan penggantian string.
abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
preg_replace('/[^0-9]/', '', $string);
Ini harus melakukan pekerjaan yang lebih baik! ...
500.0050000
extract the numbers from a string- titik desimal bukan angka!
'dan bukan tanda kutip ganda ".
Menggunakan preg_replace:
$str = '(111) 111-1111';
$str = preg_replace('/\D/', '', $str);
echo $str;
Output: 1111111111
+387 (61) 634-783string menjadi 38761634783langsung. Anda tidak harus mengurus array seperti jawaban Gaurav.
+quantifier untuk mencocokkan kecocokan lebih lama / penggantian lebih sedikit.
Untuk angka mengambang,
preg_match_all('!\d+\.?\d+!', $string ,$match);
Terima kasih telah menunjukkan kesalahannya. @mickmackusa
'!\d*.?\d+!'
?sebagai quantifier dari titik literal. Saya tidak akan mengharapkan nilai float mengandung beberapa simbol titik desimal. Pola berkomentar Yash salah ironis. Titik membutuhkan garis miring di depannya untuk membuatnya harfiah.
Saya tidak memiliki kredit untuk ini, tetapi saya hanya harus membagikannya. Regex ini akan mendapatkan angka dari string, termasuk titik / tempat desimal, serta koma:
/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
Dikutip dari sini:
php - regex - bagaimana cara mengekstrak angka dengan desimal (titik dan koma) dari sebuah string (misalnya, 1.120,01)?
Anda dapat menggunakan preg_match :
$s = "In My Cart : 11 items";
preg_match("|\d+|", $s, $m);
var_dump($m);
echo '<p>'.$m[0].'</p>';
Menggunakan preg_replace
$str = 'In My Cart : 11 12 items';
$str = preg_replace('/\D/', '', $str);
echo $str;
+quantifier untuk mencocokkan kecocokan lebih lama / penggantian lebih sedikit.
Anda dapat menggunakan fungsi berikut:
function extract_numbers($string)
{
preg_match_all('/([\d]+)/', $string, $match);
return $match[0];
}
\ddi dalam kelas karakter. Karena Anda mengakses pertandingan fullstring, tidak ada gunanya menulis grup tangkap ke dalam pola.
preg_match_all('!\d+!', $some_string, $matches);
$string_of_numbers = implode(' ', $matches[0]);
Argumen pertama dalam implode dalam kasus khusus ini mengatakan "pisahkan setiap elemen dalam pertandingan [0] dengan satu spasi." Implode tidak akan memberi spasi (atau apa pun argumen pertama Anda) sebelum angka pertama atau setelah angka terakhir.
Hal lain yang perlu diperhatikan adalah $ cocok [0] adalah tempat array cocok (yang cocok dengan persamaan reguler ini) ditemukan disimpan.
Untuk klarifikasi lebih lanjut tentang apa indeks lain dalam array untuk lihat: http://php.net/manual/en/function.preg-match-all.php
coba ini, gunakan preg_replace
$string = "Hello! 123 test this? 456. done? 100%";
$int = intval(preg_replace('/[^0-9]+/', '', $string), 10);
echo $int;
[^0-9]lebih sederhana ditulis sebagai \D.
kita dapat mengekstrak int darinya seperti
$string = 'In My Car_Price : 50660.00';
echo intval(preg_replace('/[^0-9.]/','',$string)); # without number format output: 50660
echo number_format(intval(preg_replace('/[^0-9.]/','',$string))); # with number format output :50,660
demo: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
Ikuti langkah ini untuk mengubah string menjadi angka
$value = '$0025.123';
$onlyNumeric = filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
settype($onlyNumeric,"float");
$result=($onlyNumeric+100);
echo $result;
Cara lain untuk melakukannya:
$res = preg_replace("/[^0-9.]/", "", "$15645623.095605659");
cara lain (bahkan unicode string):
$res = array();
$str = 'test 1234 555 2.7 string ..... 2.2 3.3';
$str = preg_replace("/[^0-9\.]/", " ", $str);
$str = trim(preg_replace('/\s+/u', ' ', $str));
$arr = explode(' ', $str);
for ($i = 0; $i < count($arr); $i++) {
if (is_numeric($arr[$i])) {
$res[] = $arr[$i];
}
}
print_r($res); //Array ( [0] => 1234 [1] => 555 [2] => 2.7 [3] => 2.2 [4] => 3.3 )
Skrip ini membuat file pada awalnya, menulis angka ke baris dan mengubah ke baris berikutnya jika mendapat karakter selain angka. Akhirnya, sekali lagi memilah angka-angka ke daftar.
string1 = "hello my name 12 is after 198765436281094and14 and 124de"
f= open("created_file.txt","w+")
for a in string1:
if a in ['1','2','3','4','5','6','7','8','9','0']:
f.write(a)
else:
f.write("\n" +a+ "\n")
f.close()
#desired_numbers=[x for x in open("created_file.txt")]
#print(desired_numbers)
k=open("created_file.txt","r")
desired_numbers=[]
for x in k:
l=x.rstrip()
print(len(l))
if len(l)==15:
desired_numbers.append(l)
#desired_numbers=[x for x in k if len(x)==16]
print(desired_numbers)
Tergantung pada kasus penggunaan Anda, ini juga bisa menjadi pilihan:
$str = 'In My Cart : 11 items';
$num = '';
for ($i = 0; $i < strlen($str); $i++) {
if (is_numeric($str[$i])) {
$num .= $str[$i];
}
}
echo $num; // 11
Meskipun saya akan menyetujui regex atau filter_var()akan lebih berguna dalam kasus yang disebutkan.
untuk utf8 str:
function unicodeStrDigits($str) {
$arr = array();
$sub = '';
for ($i = 0; $i < strlen($str); $i++) {
if (is_numeric($str[$i])) {
$sub .= $str[$i];
continue;
} else {
if ($sub) {
array_push($arr, $sub);
$sub = '';
}
}
}
if ($sub) {
array_push($arr, $sub);
}
return $arr;
}
Jika Anda tidak tahu format mana nomornya? int atau mengambang, lalu gunakan ini:
$string = '$125.22';
$string2 = '$125';
preg_match_all('/(\d+.?\d+)/',$string,$matches); // $matches[1] = 125.22
preg_match_all('/(\d+.?\d+)/',$string2,$matches); // $matches[1] = 125
Fungsi ini juga akan menangani angka mengambang
$str = "Doughnuts, 4; doughnuts holes, 0.08; glue, 3.4";
$str = preg_replace('/[^0-9\.]/','-', $str);
$str = preg_replace('/(\-+)(\.\.+)/','-', $str);
$str = trim($str, '-');
$arr = explode('-', $str);