Foros del Web » Programando para Internet » Javascript »

¿Como cortar cadena al principio y final?

Estas en el tema de ¿Como cortar cadena al principio y final? en el foro de Javascript en Foros del Web. cadena1=04123456 cadena2=12345604 Tengo que eliminar los numeros 04 de esas cadenas, con la cadena2 lo hago sin problemas ocupando substring(0,5) y la asigno a la ...
  #1 (permalink)  
Antiguo 07/12/2011, 12:57
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 10 meses
Puntos: 3
¿Como cortar cadena al principio y final?

cadena1=04123456
cadena2=12345604

Tengo que eliminar los numeros 04 de esas cadenas, con la cadena2 lo hago sin problemas ocupando substring(0,5) y la asigno a la variable cadenaArreglada. Pero como podria saber cuando la cadena trae los numeros 04 al principio y cortarlos.
Esto quiero conseguir

Código PHP:
if(cadena1.substring(0,7))
{
CadenaArreglada=cadena1.substring(2,5) ;
}
else if((
cadena2.substring(0,7)))
{
CadenaArreglada=cadena2.substring(0,5) ;

Mi problema es el siguiente, ¿como puede saber cuando los 04 estan al principio o al final?para sacarlos de las cadena y asignarselos a la variable CadenaArreglada, porque de esa forma solo me trabaja con los 04 que estan al final.
Gracias
  #2 (permalink)  
Antiguo 07/12/2011, 13:22
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: ¿Como cortar cadena al principio y final?

buenas,
con expresiones regulares y el método replace, es bien fácil. solo debes componer un patrón donde la secuencia esté anclado al inicio y final del string. /^secuencia|secuencia$/g. en términos humanos, el patrón dice si el string comienza con la secuencia ó termina con la secuencia. como primer argumento de replace, le pasas el patrón y como segundo argumento un string vacio.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 07/12/2011, 14:50
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 10 meses
Puntos: 3
Respuesta: ¿Como cortar cadena al principio y final?

Ya lo logre, gracias :)


Código PHP:
cadena1=04123456
cadena2
=12345604

if(cadena1.substring(0,8))
{
CadenaArreglada=cadena1.replace(/04*/,'')
CadenaArreglada=CadenaArreglada.substring(0,6) ;
}
else{
CadenaArreglada=cadena2.replace(/04$/,'');}
CadenaArreglada=CadenaArreglada.substring(0,6); 

Última edición por -thor-; 07/12/2011 a las 14:59
  #4 (permalink)  
Antiguo 07/12/2011, 15:55
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: ¿Como cortar cadena al principio y final?

no necesitas usar ambas funciones. por lo que pude analizar, lo que quieres hacer es como un trim pero personalizado. con la expresion regular y el replace te basta. replace toma efecto solo si el patrón encuentra coincidencias, por lo que en los casos bien siemples no es necesario una condición if.

si quieres hacerlo solo con substring, el proceso es algo más elaborado comparado con expresiones regulares. tendrias que determinar si al menos los primeros dos caracteres son de la secuencia 0 4 utilizando los indices del string. lo mismo para los ultimos dos caracteres.
Código:
if(string.substring(0,2) == "04") string = string.substring(2,string.length);
if(string.substring(string.length-2, string.length) == "04") string = string.substring(0, string.length-2)
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 07/12/2011, 16:03
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: ¿Como cortar cadena al principio y final?

Cita:
Iniciado por -thor- Ver Mensaje
Ya lo logre, gracias :)


Código PHP:
cadena1=04123456
cadena2
=12345604

if(cadena1.substring(0,8))
{
CadenaArreglada=cadena1.replace(/04*/,'')
CadenaArreglada=CadenaArreglada.substring(0,6) ;
}
else{
CadenaArreglada=cadena2.replace(/04$/,'');}
CadenaArreglada=CadenaArreglada.substring(0,6); 
¿Por qué no intentas mejor como dijo @zerokilled?
Código Javascript:
Ver original
  1. var customTrim = function(str){
  2.  return str.replace(/^04|04$/g, '');
  3. }
Vaya, yo lo veo bastante más corto. Incluso podrías hacer un caso general:
Código Javascript:
Ver original
  1. var customTrim = function(trim){
  2.  return function(str){
  3.   return str.replace(new RegExp(['^', '|', '$'].join(trim), 'g'), '');
  4.  }
  5. }
  6.  
  7. var customTrim04 = customTrim('04');
  8. customTrim04('04abcdef04'); // "abcdef"
Con el inconveniente de usar el contructor RegExp, que es más lento, y de tener que escapar los backslashes porque es un string.
Por último, fíjate que cadena1 y cadena2 no son strings sino números. De hecho puede que cadena1 ni siquiera valga 4.123.456, porque empieza por 0 y el browser lo tomará como número octal.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #6 (permalink)  
Antiguo 07/12/2011, 18:49
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 10 meses
Puntos: 3
Respuesta: ¿Como cortar cadena al principio y final?

Código PHP:
CadenaArreglada=cadena1.replace(/04*/,'')
CadenaArreglada=CadenaArreglada.substring(0,6) ;
}
else{
CadenaArreglada=cadena2.replace(/04$/,'');}
CadenaArreglada=CadenaArreglada.substring(0,6); 
Aqui intente hacerlo con expresiones regulares y me resulto de esa forma, es que no sabia como dejar todo en una misma expresion, la cual me eliminare esos valores al principio y al final.


Cita:
Iniciado por _cronos2 Ver Mensaje
¿Por qué no intentas mejor como dijo @zerokilled?
Código Javascript:
Ver original
  1. var customTrim = function(str){
  2.  return str.replace(/^04|04$/g, '');
  3. }

Voy hacerlo de la forma que menciono @zerokilled y siguiendo tus ejemplo :). ¿Que significa la letra /g? entonces aqui return str.replace(/^04|04$/g, ''); me estaria quitando el 04 al principio y al final, verdad?

Código Javascript:
Ver original
  1. var customTrim = function(trim){
  2.  return function(str){
  3.   return str.replace(new RegExp(['^', '|', '$'].join(trim), 'g'), '');
  4.  }
  5. }
  6.  
  7. var customTrim04 = customTrim('04');
  8. customTrim04('04abcdef04'); // "abcdef"

me podrias explicar esta linea new RegExp(['^', '|', '$'].join(trim), 'g'), '');, en especial que funcionalidad tiene join?

Esta parte me complica, porque no sé realmente como dividir los numeros para dejar eso que necesito y lo intente usando la funcion substring, esa forma estaria correcta? o se realiza de otra manera.

Lo que pasa es que debo leer una tarjetas con una pistola laser y esa informacion consulta una base de datos, sin embargo, al momento de pasar la pistola sobre el codigo de barra le agrega 04 al principio o al final, tambien en otra combinacion le agrega solamente 0 en el principio o al final del codigo.

por ejemplo yo necesito el valor 4563 y la pistola al momento de leer la tarjeta me lo deja como 04456304 o unicamente un 0 al final.
¿Existe otra foma de eliminar los numeros que no necesito? o debo seguir con el ejemplo que me has dado para lograrlo, aunque de mi manera me resulto, mas si hay otra forma mejor obvio que la implementare.
gracias
  #7 (permalink)  
Antiguo 07/12/2011, 19:02
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: ¿Como cortar cadena al principio y final?

La "letra" g es un flag de la regexp, indica que se reemplace cualquier fragmento de string que matchee con ella. Si no la pusieras, sólo reemplazaría una vez.
join sirve para unir elementos de un array con un string:
Código Javascript:
Ver original
  1. ['^', '|', '$'].join('a'); // "^a|a$"
Lo puse así porque se veía más bonito, pero podría haber puesto:
Código Javascript:
Ver original
  1. '^' + trim + '|' + trim + '$'
Por último, RegExp es el constructor de la regexp. Es lo mismo que usar la notación literal (con slashes), pero con un string.
Código Javascript:
Ver original
  1. r = /^abc$/g;
  2. r = new RegExp('^abc$', 'g');
Las dos expresiones anteriores vendrían a ser iguales, salvo algunos detalles.
Y sí, esta regexp con el replace sirve para lo que tú quieres hacer, y es más eficaz que substring.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #8 (permalink)  
Antiguo 07/12/2011, 19:34
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: ¿Como cortar cadena al principio y final?

Cita:
Esta parte me complica, porque no sé realmente como dividir los numeros para dejar eso que necesito y lo intente usando la funcion substring, esa forma estaria correcta? o se realiza de otra manera.
en programación no existe una sola forma de llegar a un mismo objetivo, pueden haber múltiples soluciones. inclusive un código pésimo puede producir el resultado esperado. pésimo no solo en el sentido de rendimiento, sino también en la estructura logística. con substring pudistes haberlo logrado, tal como el ejemplo que mostré o un derivado. no mal interpretes, no quiero decir que sea incorrecto el uso de substring. pues en ocaciones hay que trabajar con lo que solamente se conoce. mi intención mas bien era introducirte a nuevos conceptos y que compararas su beneficio vs los métodos que habitualmente envuelve si las RegExp no exisistieran.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 07/12/2011, 19:59
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 10 meses
Puntos: 3
Respuesta: ¿Como cortar cadena al principio y final?

Cita:
Iniciado por _cronos2 Ver Mensaje
La "letra" g es un flag de la regexp, indica que se reemplace cualquier fragmento de string que matchee con ella. Si no la pusieras, sólo reemplazaría una vez.
join sirve para unir elementos de un array con un string:
Código Javascript:
Ver original
  1. ['^', '|', '$'].join('a'); // "^a|a$"
Lo puse así porque se veía más bonito, pero podría haber puesto:
Código Javascript:
Ver original
  1. '^' + trim + '|' + trim + '$'
Por último, RegExp es el constructor de la regexp. Es lo mismo que usar la notación literal (con slashes), pero con un string.
Código Javascript:
Ver original
  1. r = /^abc$/g;
  2. r = new RegExp('^abc$', 'g');
Las dos expresiones anteriores vendrían a ser iguales, salvo algunos detalles.
Y sí, esta regexp con el replace sirve para lo que tú quieres hacer, y es más eficaz que substring.
Saludos (:
Muchas gracias por la explicacion y la ayuda )
  #10 (permalink)  
Antiguo 07/12/2011, 20:12
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 10 meses
Puntos: 3
Respuesta: ¿Como cortar cadena al principio y final?

Cita:
Iniciado por zerokilled Ver Mensaje
en programación no existe una sola forma de llegar a un mismo objetivo, pueden haber múltiples soluciones. inclusive un código pésimo puede producir el resultado esperado. pésimo no solo en el sentido de rendimiento, sino también en la estructura logística. con substring pudistes haberlo logrado, tal como el ejemplo que mostré o un derivado. no mal interpretes, no quiero decir que sea incorrecto el uso de substring. pues en ocaciones hay que trabajar con lo que solamente se conoce. mi intención mas bien era introducirte a nuevos conceptos y que compararas su beneficio vs los métodos que habitualmente envuelve si las RegExp no exisistieran.
No mal interpreto y me referia que si existen mejores formas que la mia me gustaria aprenderlas, para implementarlas en mis proyectos. Siempre me gustan ir investigando cosas nuevas y de verdad muchas gracias por la ayuda. )
  #11 (permalink)  
Antiguo 08/12/2011, 09:10
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 10 meses
Puntos: 3
Respuesta: ¿Como cortar cadena al principio y final?

Una ultima consulta, bueno me ha quedado claro que es mejor usa expresiones regulares en este caso, pero zerokilled si con substring quisiera quitar en una cadena de este tipo 04123004 el 04 del principio y el 004 del final ¿como deberia hacerlo en la parte del if y luego en la asignacion a la variable string?

Código PHP:
if(string.substring(0,2) == "04")  && 
string.substring(string.length-2string.length) == "04"

string string.substring(0string.length-2
Antes que se me olvide en una expresion regula, ¿como podria indicarle que en una cadena de 123456 me acepte sólo hasta el 5 y el 6 quede afuera.
Disculpa si pregunto mucho, pero me intereso aprender bien sobre este tema
gracias

Última edición por -thor-; 08/12/2011 a las 09:20
  #12 (permalink)  
Antiguo 08/12/2011, 10:45
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: ¿Como cortar cadena al principio y final?

A lo primero:
Código Javascript:
Ver original
  1. if(string.substr(0,2) == '04'){
  2.  string = string.substr(2);
  3. }
  4.  
  5. if(string.substr(string.length - 3, 3) == '004'){
  6.  string = string.substr(0, string.length - 3);
  7. }
Fíjate que uso substr en vez de substring, sirven para lo mismo pero son diferentes.
En cuanto a la regexp, si lo he entendido bien:
Código Javascript:
Ver original
  1. string = string.replace(/(\d+)5\d+/g, '$15');
Aunque deberías tener cuidado con el + greedy, dependiendo de la cadena que le vayas a pasar tendrías que cambiarlo por +?
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #13 (permalink)  
Antiguo 08/12/2011, 16:05
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 10 meses
Puntos: 3
Respuesta: ¿Como cortar cadena al principio y final?

Muchas gracias por la ayuda :), string = string.replace(/(\d+)5\d+/g, '$15');, aqui me indica que me acepte 5 valores numericos con la letra d y que comience de '$15'(de 1 a 5 en el signo $)
verdad?
  #14 (permalink)  
Antiguo 08/12/2011, 16:45
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: ¿Como cortar cadena al principio y final?

Creo que te lie un poco La regexp significa:
Cita:
secuencia de números hasta el último "5" de esta +
"5" +
el resto de la secuencia numérica
El '$15' significa el primer valor capturado ('$1') y "5". El valor capturado son los números que se encuentren dentro de los paréntesis de la regexp.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #15 (permalink)  
Antiguo 08/12/2011, 18:15
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 10 meses
Puntos: 3
Respuesta: ¿Como cortar cadena al principio y final?

_cronos2 gracias por el tiempo y la ayuda que me entregaste :)

Etiquetas: cortar, principio, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:17.