2013-07-04 16 views
6

Użytkownik może wpisać numer telefonu. (Tylko cyfry i kreski, kreski nie są obowiązkowe)Regex dla limitowanych liczb, nieograniczone środkowe kreski?

On może mieć tyle (środkowe) kreski (-), ale całkowitą liczbę cyfr musi być 10.

I've managed pisanie przy użyciu regex pozytywny uprzedzona o "-" w liczbach:

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

Ale mam 2 problemy z tym:

  • kreska (w moim regex) może być także na początku i na końcu i to nie ważne .

  • Nie udało mi się zastosować ograniczeń 10-cyfrowych.

p.s. przykłady ważnych przykładów:

050-6783828 050-678-38-28 0506783828

nie ważne:

-0506783826 0506783826- 050678--3826

p.s.2 proszę zauważyć t jego pytanie jest oznaczone jako regex. Nie szukam rozwiązań js (non-regex).

+0

Moje podejście do RegExp byłoby po prostu .replace (/ -/g, "") –

+0

@AlexK. tak. ale czasami chcesz mieć więcej wiedzy na określony temat ... (rgx) –

Odpowiedz

8

Myślę, że chcesz coś takiego:

^\d(?:-?\d){9}$ 
  • zaczynać się od cyfry.
  • 9 razy: opcjonalny myślnik i inna cyfra.

przykład robocza: http://rubular.com/r/CrgTOrXC8E

+0

Dla mnie najbardziej irytujące jest to, że spodziewałem się pozytywnego wyniku z wyprzedzeniem i nie znalazłem go w twoim przykładzie pracy ... co sprawia, że ​​czuję się naprawdę głupio. –

+1

Przepraszam, że zawodzę ':)' Looakeads są * bardzo * powszechne w tych wzorach - jeśli dodasz inne wymaganie, prawdopodobnie będzie to wymagało uprzedzenia. – Kobi

2
^[0-9](-?[0-9]){8}-?[0-9]$ 

Cyfra na początek i koniec, 8 grup opcjonalnych myślnikiem i cyfry plus opcjonalny desce rozdzielczej przed ostatnią cyfrą

Tylko jedna kreska jest dozwolone między eatch sąsiednie cyfry.

var pat = new RegExp('^[0-9](-?[0-9]){8}-?[0-9]$') 
// correct 
console.log(pat.test('0506783828')) 
console.log(pat.test('0-5-0-6-7-8-3-8-2-8')) 
// incorrect 
console.log(pat.test('0506783828-')) 
console.log(pat.test('-0506783828')) 
console.log(pat.test('05--06783828')) 
+0

Praca. Dziękuję Ci bardzo. –

Powiązane problemy