2010-12-16 11 views
22

Jak filtrować tylko liczby znaków?Liczba filtrów JQuery ciągu znaków

Example Pseudo Code: 
number = $("thumb32").filternumbers() 
number = 32 
+0

Czy możesz podać przykładowe dane? dkwlj-32-fjkij-ff0-33? – sunn0

+2

Proszę przeczytać FAQ: http://stackoverflow.com/faq Pytania powinny być * pytania *. Im więcej wysiłku włożysz w swoje pytanie, tym lepsza będzie jakość i ilość odpowiedzi, które otrzymasz w ostatnim czasie (i większy szacunek dla miejsca, które pokazujesz). –

Odpowiedz

67

Nie trzeba jQuery do tego - po prostu stary JavaScript regex replacement

var number = yourstring.replace(/[^0-9]/g, '')

Pozwoli to pozbyć się wszystkiego, co nie jest [0-9]

Edycja: Oto mała funkcja aby wyodrębnić wszystkie liczby (jako rzeczywiste liczby) z ciągu wejściowego. Nie jest to wyczerpująca ekspresja, ale będzie dobrym początkiem dla każdego, kto potrzebuje.

function getNumbers(inputString){ 
    var regex=/\d+\.\d+|\.\d+|\d+/g, 
     results = [], 
     n; 

    while(n = regex.exec(inputString)) { 
     results.push(parseFloat(n[0])); 
    } 

    return results; 
} 

var data = "123.45,34 and 57. Maybe add a 45.824 with 0.32 and .56" 
console.log(getNumbers(data)); 
// [123.45, 34, 57, 45.824, 0.32, 0.56]; 
+6

Dlaczego regex jest taki trudny? Wygląda tak obco, a mój mózg wydaje się natychmiast wyłączony, ponieważ jest bardzo przytłoczony przez wiele znaków interpunkcyjnych ... i symboli, jeśli nie znam ich znaczenia, ale wiem, że coś znaczą ... Dlaczego muszę patrz za każdym razem? Informacje po prostu nie wbijają się w moją głowę, bez względu na ... –

+5

^Witamy w klubie. –

+0

Witaj. Ale dla liczby jak 12,5, 20,3. Wracają 125 i 203? –

26

Niezupełnie jQuery w ogóle:

number = number.replace(/\D/g, ''); 

To wyrażenie regularne, /\D/g, pasuje do każdego non-cyfrowy kod. W ten sposób wywołanie .replace() zastępuje wszystkie nie będące cyframi (wszystkie, dzięki "g") pustym ciągiem.

edit — jeśli chcesz rzeczywistej * liczba wartości, można użyć parseInt() po usunięciu non-cyfr z ciągu znaków:

var number = "number32"; // a string 
number = number.replace(/\D/g, ''); // a string of only digits, or the empty string 
number = parseInt(number, 10); // now it's a numeric value 

Jeśli oryginalny ciąg może mieć żadnych cyfr w ogóle , dostaniesz numeryczną wartość inną niż NaN od parseInt w takim przypadku, która może być równie dobra jak cokolwiek innego.

+0

Możesz potrzebować tam 'parseInt'? – sje397

+0

@ sje397: Może, może nie - z jakością pytania, nie mamy pojęcia, czy on/ona chce numer ciąg zawierający tylko cyfry. –

+0

Może = może nie = może? ;) – sje397