2012-12-03 28 views
7

Chcę wyrażenia regularnego, które będzie akceptowało tylko liczby zmiennoprzecinkowe od 0 do 9 i znak minus.Regex akceptujący liczby zmiennoprzecinkowe i minus (-) znak

Proszę o pomoc.

+0

Co pan spróbować? Z czym masz problem? – SLaks

+0

Który separator dziesiętny używasz: ',', '.' lub jedno z nich? –

+0

możliwy duplikat [Regex dla zmiennoprzecinkowej?] (Http://stackoverflow.com/questions/9186780/regex-for-floating-point) –

Odpowiedz

11

^[-+]?[0-9]*\.?[0-9]+$

  • ^ - początek napisu
  • [-+]? - 0 lub 1 wskaźnik znak
  • [0-9]* - 0 lub więcej liczby całkowite
  • \. - postać . (. jest stosowany w regex oznacza „dowolny znak”)
  • [0-9]+ - 1 lub więcej liczb całkowitych
  • $ - koniec łańcucha

Jeśli zamiast za pomocą przecinka jako separatora dziesiętnego użyj , zamiast \.

Jeśli używasz zarówno/albo można użyć [.,]

+0

Umożliwia to tylko separator dziesiętny kropki, a nie dowolny znak. Pozbądź się odwrotnego ukośnika, by oznaczać "dowolną postać". Ale wtedy nie byłoby to ważne dla liczby zmiennoprzecinkowej.A twoje ostatnie zdanie powinno wspomnieć '[.,]'. – rmaddy

+0

@rmaddy Myślę, że mylisz się w obu swoich wypowiedziach. Chciałem zezwolić tylko na. jako separator dziesiętny w oryginalnym łańcuchu, dlatego dodałem dodatkowe zdania. Ostatnie zdanie działa zarówno z [.,], Jak i [\.,] Przynajmniej na http://regexpal.com –

+0

Każde wyrażenie regularne, z jakim kiedykolwiek pracowałem, po prostu wstawiałeś '[.,]', A nie ' [\.,] '. Ale nie pracowałem z każdym możliwym silnikiem regex. Musiałem źle odczytać coś, gdy komentowałem, ponieważ kiedy patrzę teraz na twoją odpowiedź, większość mojego komentarza nie ma zastosowania. Od czasu skomentowania musiałem to zmienić. – rmaddy

0

Wypróbuj ^[-+]?[0-9]*[.,]?[0-9]+$.

To wyrażenie regularne będzie pasowało do opcjonalnego znaku, po którym następuje zero lub więcej cyfr, po których następuje kropka i jedna lub więcej cyfr (liczba zmiennoprzecinkowa z opcjonalną częścią całkowitą), lub po której następuje jedna lub więcej cyfr (Liczba całkowita).

Źródło: http://www.regular-expressions.info/floatingpoint.html - zmieniony pracować z przecinkiem jako separator dziesiętny

+0

To nie zadziała w ustawieniach regionalnych, które używają separatora dziesiętnego innego niż kropka. – rmaddy

+0

Dzięki, edytowane. –

+0

Pozwala to obecnie na użycie dowolnego znaku jako separatora. '\ .' –

Powiązane problemy