2016-06-06 19 views
-2

Für eine Studie, die ich mache, erhält jeder eine eindeutige Nummer. Alle eindeutigen Zahlen sind durch 11 teilbar (dies geschieht, weil sich sequenzielle Zahlen dadurch stark voneinander unterscheiden).Schreiben Sie einen regulären Ausdruck, der durch 11 teilbare Zahlen identifiziert.

Ich würde im Idealfall wie eine Regex, die ich verwenden kann, um zu überprüfen, dass die Zahl im study_id Feld eingetragen ist ein akzeptabler Wert - zB durch 11 teilbar Ich werde führende Nullen auf maximal 5 Ziffern haben So:

  • 00011 - Acceptable
  • 00012 - Nicht akzeptabel
  • 13211 - Acceptable
  • 13221 - Nicht akzeptabel

Anregungen erhielt dankbar

+0

Ich würde mich wundern, wenn dies mit einem regulären Ausdruck möglich wäre. – Adrian

+1

Ähnliche Fragen, interessante Lektüre: [Wie schreibe ich einen regulären Ausdruck, der eine IPv4-Adresse punktiert?] (Https://blogs.msdn.microsoft.com/oldnewthing/20060522-08/?p=31113) –

+1

Es könnte möglich sein, da es sogar eine Abkürzungsregel für die Berechnung der Division mit 11 gibt, aber wenn man bedenkt, wie lang die Regex für durch 3 teilbar ist, würde ich sagen, dass dies viel zu weit gefasst ist. –

Antwort

4

Das ist nicht möglich, weil es keine wörtliche Übereinstimmung zwischen den Zahlen sind, die durch 11 teilbar sind. Regex wird für die Textübereinstimmung verwendet.

Zum Beispiel 000165 ist teilbar durch 11 wie 00011.

Der beste Weg, um die Zahl zu validieren, ist es, sie durch 11 zu teilen und zu sehen, ob es noch einen Rest gibt. So in Excel würden Sie dies tun:

=IF(MOD(165, 11) = 0, "VALID", "INVALID") 

oder C# Sie tun würde, so etwas wie dieses

bool isValid = 165 % 11 == 0; 

(Haftungsausschluss Ich bin nicht vertraut mit ODK so kann ich nicht liefern passendes Beispiel; Ich habe gerade auf der besten Sprache erraten, um zu schreiben)