¿Cómo puedo obtener mi número en una variable simple y no en Array?
Bizboss
34
$ var = implode ('', $ coincide [0]);
Gaurav
2
@Bizboss En una línea similar, inténtalo $newstr = preg_replace('!\d+!', '', $str);. Eliminará todos los dígitos de su cadena. Ejemplo: $str = 'In My Cart : 11 12 items';saldrá In My Cart : items.
Aether
77
Esto no es una forma amigable de recursos. use preg_replace("/[^0-9]/","",$string);orfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
eapo
66
@eapo filter_var($str, FILTER_SANITIZE_NUMBER_INT);extrajo dígitos, signo más y menos . ¡La expresión regular solo extrajo dígitos!
PATROMO
537
Si solo quiere filtrar todo excepto los números, lo más fácil es usar filter_var :
Un guión antes de un número se tratará como un signo menos.
Elnur Abdurrakhimov
43
No solo antes del número. Cualquier +/- no se truncará. Si tienes xxx-yyy-24lo conseguirás --24. Puede usar str_repleace(array('+','-'), '', $result)para eliminar ambos signos.
imclickingmaniac
44
@imclickingmaniac simplemente puede hacerlo max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))utilizando matrices y reemplazos de cadenas.
Eduard
2
el uso de max () también devuelve el signo menos en las cadenas, la opción aquí es strreplace (). Gracias por los consejos.
Me gusta esto porque devuelve una cadena, no una matriz como lo hacen los ejemplos con preg_match_all, y me gusta porque solo quiero números, no un signo más o guión, como lo hace el ejemplo filter_var.
Darrell Duane
43
Con éxito con este método: algo como 'En mi coche_Precio: 500.00imprimirá:50000
ErickBest
16
@ErickBest Eso es bueno, considerando que la pregunta era extract the numbers from a string: ¡un punto decimal no es un número!
rybo111
1
Este es un punto crítico, pero probablemente desee utilizar comillas simples 'y no comillas dobles ".
En realidad está mal :) Debería estarlo'!\d*.?\d+!'
Yash
Preferiría usarlo ?como cuantificador del punto literal. No esperaría que un valor flotante contenga múltiples símbolos de punto decimal. El patrón comentado de Yash es irónicamente incorrecto . El punto necesita una barra delante para hacerlo literal.
mickmackusa
11
No tengo el crédito por esto, pero solo tengo que compartirlo. Esta expresión regular obtendrá números de una cadena, incluidos puntos / lugares decimales, así como comas:
Esto no está validando la cadena para una coma entre conjuntos de tres números enteros. ... el problema de copiar y pegar el patrón de otra persona y no entenderlo / probarlo.
No hay ningún beneficio en escribir \ddentro de una clase de caracteres. Como está accediendo a la coincidencia de cadena completa, no tiene sentido escribir un grupo de captura en el patrón.
El primer argumento en implosión en este caso específico dice "separe cada elemento en coincidencias [0] con un solo espacio". Implode no pondrá un espacio (o lo que sea su primer argumento) antes del primer número o después del último número.
Algo más a tener en cuenta es $ coincidencias [0] es donde se almacena la matriz de coincidencias (que coinciden con esta expresión regular) encontrada.
$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
Este script crea un archivo al principio, escribe números en una línea y cambia a una línea siguiente si obtiene un carácter diferente al número. Finalmente, nuevamente ordena los números a una lista.
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)
Introducir guiones en este proceso es completamente innecesario. Esta respuesta también carece de una explicación de cómo funciona y por qué cree que es una buena idea.
Respuestas:
fuente
$newstr = preg_replace('!\d+!', '', $str);
. Eliminará todos los dígitos de su cadena. Ejemplo:$str = 'In My Cart : 11 12 items';
saldráIn My Cart : items
.preg_replace("/[^0-9]/","",$string);
orfilter_var($str, FILTER_SANITIZE_NUMBER_INT);
filter_var($str, FILTER_SANITIZE_NUMBER_INT);
extrajo dígitos, signo más y menos . ¡La expresión regular solo extrajo dígitos!Si solo quiere filtrar todo excepto los números, lo más fácil es usar filter_var :
fuente
xxx-yyy-24
lo conseguirás--24
. Puede usarstr_repleace(array('+','-'), '', $result)
para eliminar ambos signos.max(0,filter_var($str, FILTER_SANITIZE_NUMBER_INT))
utilizando matrices y reemplazos de cadenas.abs((int) filter_var($str, FILTER_SANITIZE_NUMBER_INT));
¡Esto debería hacer un mejor trabajo! ...
fuente
500.00
imprimirá:50000
extract the numbers from a string
: ¡un punto decimal no es un número!'
y no comillas dobles"
.Utilizando
preg_replace
:Salida: 1111111111
fuente
+387 (61) 634-783
cadena a38761634783
directamente. No tiene que ocuparse de matrices como la respuesta de Gaurav.+
cuantificador para que coincida con coincidencias más largas / menos reemplazos.Para números flotantes,
Gracias por señalar el error. @mickmackusa
fuente
'!\d*.?\d+!'
?
como cuantificador del punto literal. No esperaría que un valor flotante contenga múltiples símbolos de punto decimal. El patrón comentado de Yash es irónicamente incorrecto . El punto necesita una barra delante para hacerlo literal.No tengo el crédito por esto, pero solo tengo que compartirlo. Esta expresión regular obtendrá números de una cadena, incluidos puntos / lugares decimales, así como comas:
/((?:[0-9]+,)*[0-9]+(?:\.[0-9]+)?)/
Citado desde aquí:
php - regex - ¿cómo extraer un número con decimal (punto y coma) de una cadena (por ejemplo, 1,120.01)?
fuente
Puedes usar preg_match :
fuente
echo '<p>'.$m[0].'</p>';
Usando preg_replace
fuente
+
cuantificador para que coincida con coincidencias más largas / menos reemplazos.Puede usar la siguiente función:
fuente
\d
dentro de una clase de caracteres. Como está accediendo a la coincidencia de cadena completa, no tiene sentido escribir un grupo de captura en el patrón.El primer argumento en implosión en este caso específico dice "separe cada elemento en coincidencias [0] con un solo espacio". Implode no pondrá un espacio (o lo que sea su primer argumento) antes del primer número o después del último número.
Algo más a tener en cuenta es $ coincidencias [0] es donde se almacena la matriz de coincidencias (que coinciden con esta expresión regular) encontrada.
Para obtener más aclaraciones sobre para qué sirven los otros índices de la matriz, consulte: http://php.net/manual/en/function.preg-match-all.php
fuente
prueba esto, usa preg_replace
MANIFESTACIÓN
fuente
[^0-9]
se escribe más simplemente como\D
.O
O
Esto devolverá solo el valor numérico
fuente
podemos extraer int de ella como
demostración: http://sandbox.onlinephpfunctions.com/code/82d58b5983e85a0022a99882c7d0de90825aa398
fuente
Siga este paso, convertirá la cadena en número
Otra forma de hacerlo:
fuente
otra forma (cadena unicode incluso):
fuente
Este script crea un archivo al principio, escribe números en una línea y cambia a una línea siguiente si obtiene un carácter diferente al número. Finalmente, nuevamente ordena los números a una lista.
fuente
Dependiendo de su caso de uso, esto también podría ser una opción:
Aunque estaría de acuerdo con una expresión regular o
filter_var()
sería más útil en el caso indicado.fuente
para utf8 str:
fuente
fuente
Estas funciones también manejarán los números flotantes
fuente