2009-01-15 45 views
21

Trong javascript, cách tốt nhất để phân tích cú pháp INT từ một chuỗi bắt đầu bằng một chữ cái (chẳng hạn như "test [123]") là gì? Tôi cần một cái gì đó sẽ làm việc cho ví dụ dưới đây.Phân tích cú pháp một Int từ một chuỗi trong javascript

JS của tôi:

$(document).ready(function() { 

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

HTML được tạo của tôi:

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

Cảm ơn bạn!

Trả lời

57

Bạn có thể sử dụng một biểu thức chính quy để phù hợp với số lượng:

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

Dấu kiểm cho tính ngắn gọn và dễ đọc. Cảm ơn tất cả mặc dù. :) – Wickethewok

+4

Lưu ý rằng regex nên được thay đổi thành "/ [- +]? \ D + /" cho một trường hợp tổng quát hơn (để cho phép ints đã ký), nhưng điều đó có vẻ không cần thiết cho tình huống của OP. –

+4

Điều gì sẽ làm cho nó mạnh mẽ hơn là làm $ (this) .attr ("id"). Match (/ \\ [(\ d +) \\] /) [1] vì điều đó sẽ cho phép những thứ như "attribute7 [123 ] " – PEZ

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

Điều thú vị là, điều này sẽ không làm việc nếu được chữ nổi float hợp lệ như "1e10" – Triptych

+1

Tôi không nghĩ rằng điều này sẽ làm việc ở tất cả mà không có cờ toàn cầu. – Prestaul

+6

Tất nhiên nó sẽ không hoạt động với phao nổi. Các op đặc biệt hỏi về ints. –

1

Có lẽ chỉ lọc chuỗi bằng .replace(). Nếu có một cách khác thì tôi không biết gì về nó:

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

Bạn có thể có thể sử dụng một số Regex để đưa rằng trong chỉ có một .replace(), nhưng tôi không tốt với Regex vì vậy tôi chỉ làm điều đó hai lần .

thử nghiệm này trong trình duyệt của bạn với

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

nên cảnh báo 123.

Các vấn đề liên quan