2017-05-13 1 views
1

Ich werde die IR-Handynummer mit dem regulären Ausdruck validieren, aber es stimmt nicht überein! Zum Beispiel "09126104851". Was ist das Problem?Regulärer Ausdruck für IR-Handynummer

"^09[123456789]{2}(^0[123456789]{1}[0-9]{6}|[123456789]{1}[0-9]{7})$" 
+1

warum hast du '^', Anfang des Strings, am Anfang und in der Mitte der Regex? Wie würde das jemals zusammenpassen? –

Antwort

1

Ihr Ausdruck entspricht:

^09[1-9]{2}(^0[1-9]{1}[0-9]{6}|[1-9]{1}[0-9]{7})$ 

die auch kürzer geschrieben werden als:

^09[1-9]{2}(^0[1-9]{1}\d{6}|[1-9]{1}\d{7})$ 

Jetzt haben Sie einen Fehler in der gemacht Mitte ist ^0. Wahrscheinlich wollte man [^0] (alles nicht Null):

^09[1-9]{2}([^0][1-9]{1}\d{6}|[1-9]{1}\d{7})$ 

Aber das größte Problem ist dieser Teil:

  • 09[1-9]{2} Matches insgesamt 4 Ziffern
  • [^0][1-9]{1}\d{6} Matches insgesamt 8 Ziffern
  • [1-9]{1}\d{7} passt auch insgesamt 8 Ziffern

versuchen Sie also 8 + 4 = 12 Ziffern zu entsprechen, während Telefonnummer 11.

hat ich wette, dass Sie Ausdruck sein wollte: Spiele vor

^09[1-9]{2}([1-9]{1}\d{6}|[1-9]{1}\d{6})$ 

Und jetzt werden Sie diese abwechselnd bemerken und nach | sind gleich! So macht diesen Ausdruck noch kleiner:

^09[1-9]{2}([1-9]{1}\d{6})$ 

Wenn wir Gruppierung der letzten 7 Ziffern entlassen können - wir Ähnliche Teile bemerken: [1-9]{2} und [1-9]{1}. Auf diese Weise kann weiteren Ausdruck reduzieren:

^09[1-9]{3}\d{6}$ 

Demo

+0

Sie sind sehr gut darin. Ausgezeichnet –

0

Mit diesem regulären Ausdruck statt: "^09\d{9}$"

Zum Beispiel:

System.Text.RegularExpressions.Regex.IsMatch("09126104851", @"^09\d{9}$") 

es an der Geige Check: https://dotnetfiddle.net/8quyvL

1

Weil Sie haben ^ Symbol in der Mitte des regulären Ausdrucks. ^ bedeutet "am Anfang der Zeichenfolge". Sie müssen von @msd regex: ^09\d{9}$