Bagaimana saya bisa mendapatkan nomor saya dalam variabel sederhana dan tidak di Array?
Bizboss
34
$ var = implode ('', $ cocok [0]);
Gaurav
2
@Bizboss Dengan nada yang sama, coba $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.
Aether
77
ini bukan cara yang ramah sumber daya. gunakan preg_replace("/[^0-9]/","",$string);ataufilter_var($str, FILTER_SANITIZE_NUMBER_INT);
eapo
6
@eapo filter_var($str, FILTER_SANITIZE_NUMBER_INT);mengekstraksi angka, tanda tambah dan minus . Regex hanya mengekstraksi digit!
PATROMO
537
Jika Anda hanya ingin memfilter segala sesuatu selain nomor yang keluar, cara termudah adalah menggunakan filter_var :
Tanda hubung sebelum angka akan dianggap sebagai minus.
Elnur Abdurrakhimov
43
Tidak hanya sebelum nomor. +/- tidak akan terpotong. Jika sudah, xxx-yyy-24Anda akan mendapatkannya --24. Anda dapat menggunakan str_repleace(array('+','-'), '', $result)untuk menghapus kedua tanda.
imclickingmaniac
4
@imclickingmaniac, Anda cukup melakukannya max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))dengan menggunakan array dan penggantian string.
Eduard
2
menggunakan max () juga mengembalikan tanda minus pada string, harap strreplace () adalah opsi di sini. Terima kasih atas tipsnya.
Saya suka ini karena mengembalikan string, bukan array seperti contoh dengan preg_match_all lakukan, dan saya suka karena saya hanya ingin angka, bukan tanda tambah atau tanda hubung, seperti contoh filter_var lakukan.
Darrell Duane
43
500.0050000
Berhati
16
@ ErickBest Itu hal yang baik, mengingat pertanyaannya adalah extract the numbers from a string- titik desimal bukan angka!
rybo111
1
Ini adalah nitpick tetapi Anda mungkin ingin menggunakan tanda kutip tunggal 'dan bukan tanda kutip ganda ".
Saya lebih suka menggunakan ?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.
mickmackusa
11
Saya tidak memiliki kredit untuk ini, tetapi saya hanya harus membagikannya. Regex ini akan mendapatkan angka dari string, termasuk titik / tempat desimal, serta koma:
Tidak ada manfaatnya menulis \ddi dalam kelas karakter. Karena Anda mengakses pertandingan fullstring, tidak ada gunanya menulis grup tangkap ke dalam pola.
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.
$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
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)
Memperkenalkan tanda hubung untuk proses ini sama sekali tidak perlu. Jawaban ini juga tidak memiliki penjelasan tentang cara kerjanya dan mengapa Anda merasa itu adalah ide yang bagus.
Jawaban:
sumber
$newstr = preg_replace('!\d+!', '', $str);
. Ini akan menghapus semua digit dari string Anda. Contoh:$str = 'In My Cart : 11 12 items';
akan ditampilkanIn 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 :
sumber
xxx-yyy-24
Anda akan mendapatkannya--24
. Anda dapat menggunakanstr_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));
Ini harus melakukan pekerjaan yang lebih baik! ...
sumber
500.00
50000
extract the numbers from a string
- titik desimal bukan angka!'
dan bukan tanda kutip ganda"
.Menggunakan
preg_replace
:Output: 1111111111
sumber
+387 (61) 634-783
string menjadi38761634783
langsung. Anda tidak harus mengurus array seperti jawaban Gaurav.+
quantifier untuk mencocokkan kecocokan lebih lama / penggantian lebih sedikit.Untuk angka mengambang,
Terima kasih telah menunjukkan kesalahannya. @mickmackusa
sumber
'!\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)?
sumber
Anda dapat menggunakan preg_match :
sumber
echo '<p>'.$m[0].'</p>';
Menggunakan preg_replace
sumber
+
quantifier untuk mencocokkan kecocokan lebih lama / penggantian lebih sedikit.Anda dapat menggunakan fungsi berikut:
sumber
\d
di dalam kelas karakter. Karena Anda mengakses pertandingan fullstring, tidak ada gunanya menulis grup tangkap ke dalam pola.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
sumber
coba ini, gunakan preg_replace
DEMO
sumber
[^0-9]
lebih sederhana ditulis sebagai\D
.Atau
Atau
Ini hanya akan mengembalikan nilai numerik
sumber
kita dapat mengekstrak int darinya seperti
demo: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
sumber
Ikuti langkah ini untuk mengubah string menjadi angka
Cara lain untuk melakukannya:
sumber
cara lain (bahkan unicode string):
sumber
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.
sumber
Tergantung pada kasus penggunaan Anda, ini juga bisa menjadi pilihan:
Meskipun saya akan menyetujui regex atau
filter_var()
akan lebih berguna dalam kasus yang disebutkan.sumber
untuk utf8 str:
sumber
sumber
Fungsi ini juga akan menangani angka mengambang
sumber