2010-03-31 14 views
50

To działa:Javascript Wyrażenia regularne - zamienić znaki nienumeryczne

var.replace(/[^0-9]+/g, ''); 

To proste urywek zastąpi niczego, co nie jest liczbą z niczym.

Ale cyfry po przecinku też są prawdziwe. Tak więc, staram się wymyślić, jak uwzględnić kropkę.

Jestem pewien, że to naprawdę proste, ale moje testy nie działają.

+0

Szukasz jednego numeru lub wielu numerów? To znaczy. dla "12.3 a b5" czy chcesz zwrócić "12.3 5" lub "12.35", czy też ten ciąg wejściowy nie jest nawet możliwy? – tloflin

Odpowiedz

69

Uciekłeś z okresu? var.replace(/[^0-9\.]+/g, '');

+0

Ucieczka z tego okresu jest niepotrzebna, jak sądzę. – Lane

4

Spróbuj tego:

var.replace(/[^0-9\\.]+/g, ''); 
2

Spróbuj tego:

var.replace(/[0-9]*\.?[0-9]+/g, ''); 

że tylko pasuje prawidłowych dziesiętnych (na przykład "1", "1.0", ".5" , ale nie" 1.0. 22")

+1

W rzeczywistości pasuje to do B.006 lub bla. On szuka negatywnej sprawy. –

+2

Ooh ... źle odczytałem pytanie. Oooo. – Eric

2

Jeśli nie chcesz złapać adres IP wraz z miejscami po przecinku:

var.replace(/[^0-9]+\\.?[0-9]*/g, ''); 

Który złapie tylko cyfry z jednym lub zerowych okresów

+0

To jest złe. Dopasowuje liczby bez cyfr, po których następuje możliwy okres, po którym następują liczby. Plakat chce zastąpić wszystkie numery bez niczego. –

+0

Dzięki. Źle zrozumiałem pytanie. – dkinzer

+0

Chociaż myślę, że to mówi, że pasuje do wszystkiego, co zaczyna się od jednej lub więcej liczb, a następnie 0 lub 1 kropli, po której następuje 0 lub więcej liczb. – dkinzer

8

Wymiana czegoś, co nie jestliczba jest trochę trudniejsze niż zastąpienie coś jest liczbą.

Osoby sugerujące dodanie kropki, ignorują fakt, że. jest również używany jako kropka, więc:

This is a test. 0.9, 1, 2, 3 stanie się .0.9123.

Specyficzne wyrażenie w twoim problemie zależy w dużym stopniu od celu. Jeśli masz tylko jeden numer w swoim ciągiem, można to zrobić:

var.replace(/.*?(([0-9]*\.)?[0-9]+).*/g, "$1")

Znajduje to pierwszy numer, a zastępuje cały łańcuch z dopasowanej liczby.

0

Jak ow ten sposób:

var numbers = str.gsub(/[0-9]*\.?[0-9]+/, "#{0} "); 
0

Sweet and short inline zastąpienie znaków nienumerycznych w ASP.Net pole tekstowe:

<asp:TextBox ID="txtJobNo" runat="server" class="TextBoxStyle" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" /> 

zmienić część regex jako you'ld podoba. Wiele osób narzeka na kursor idący prosto do końca, gdy używa się klawiszy strzałek, ale ludzie mają tendencję do radzenia sobie z tym bez zauważenia go na przykład, strzałka ... strzałka ... strzałka ... w porządku, a następnie ... backspace back space, wprowadź nowe znaki.

0

Istnieje już wiele poprawnych odpowiedzi, wskazując tylko, że może być konieczne uwzględnienie znaków ujemnych. "\-" dodaj to do każdej istniejącej odpowiedzi, aby umożliwić stosowanie liczb ujemnych.

0

Oto kilka typów jQuery klasy wejście używam:

$("input.intgr").keyup(function (e) { // Filter non-digits from input value. 
    if (/\D/g.test($(this).val())) $(this).val($(this).val().replace(/\D/g, '')); 
}); 
$("input.nmbr").keyup(function (e) { // Filter non-numeric from input value. 
    var tVal=$(this).val(); 
    if (tVal!="" && isNaN(tVal)){ 
     tVal=(tVal.substr(0,1).replace(/[^0-9\.\-]/, '')+tVal.substr(1).replace(/[^0-9\.]/, '')); 
     var raVal=tVal.split(".") 
     if(raVal.length>2) 
      tVal=raVal[0]+"."+raVal.slice(1).join(""); 
     $(this).val(tVal); 
    } 
}); 

intgr pozwala tylko numeryczny - podobnie jak inne rozwiązania tutaj.

nmbr zezwala tylko na dziesiętne dodatnie/ujemne. Ujemny musi być pierwszy znak (można dodać „+” do filtra jeśli jest to potrzebne), paski -3.6.23.333 do -3.623333

Kładę nmbr się, bo znudziło próbuje znaleźć sposób, aby zachować tylko 1 dziesiętny i ujemny na 1. pozycji

Powiązane problemy