2009-01-15 8 views
21

En javascript, ¿cuál es la mejor manera de analizar una INT de una cadena que comienza con una letra (como "prueba [123]")? Necesito algo que funcione para el siguiente ejemplo.Analizando un Int de una cadena en javascript

Mis JS:

$(document).ready(function() { 

    $(':input').change(function() { 
     id = parseInt($(this).attr("id")); //fails for the data below 
     alert(id); 
    }); 
} 

Mi HTML generado:

<select id="attribute[123]"> 
<!-- various options --> 
</select> 
<select id="attribute[456]"> 
<!-- various options --> 
</select> 

Gracias!

Respuesta

57

se puede utilizar una expresión regular para que coincida con el número:

$(this).attr("id").match(/\d+/) 
+1

Marca de verificación para sucinto y legibilidad. Gracias a todos sin embargo. :) – Wickethewok

+4

Tenga en cuenta que la expresión regular debería cambiarse a "/ [- +]? \ D + /" para un caso más general (para permitir las entradas firmadas), pero eso parece innecesario para la situación del OP. –

+4

Lo que lo haría más robusto es hacer $ (this) .attr ("id"). Match (/ \\ [(\ d +) \\] /) [1] ya que eso permitiría cosas como "attribute7 [123 ] " – PEZ

23
parseInt(input.replace(/[^0-9-]/,""),10) 
+0

Curiosamente, esto no funcionará si se les da literales de flotación válidos como "1e10" – Triptych

+1

No creo que esto funcione en absoluto sin la bandera global. – Prestaul

+6

Por supuesto que no funcionará para flotadores. La operadora preguntó específicamente sobre ints. –

1

Probablemente solo filtre la cadena con .replace(). Si hay otra manera entonces soy consciente de ello,

parseInt("attribute[123]".replace("attribute[", "").replace("]", ""))); 

Probablemente se podría utilizar un poco de expresión regular para poner esto en una sola .replace(), pero no soy bueno con las expresiones regulares, así que sólo hice dos veces .

Prueba de esto en su navegador con

javascript:alert(parseInt("attribute[123]".replace("attribute[", "").replace("]", ""))); 

debe alertar a 123.