2016-07-23 9 views
0

Wie füge ich die Ausnahme von Null oder den Wert Null auf die folgende Regex-Anweisung?Wie füge ich Null Ausnahme zu Regex-Anweisung C#

@ "^ [a-zA-Z0-9] \ d {2} a-zA-Z0-9 {2} [A-Za-z0-9] $ | [^ \ x00- \ x80] | \ b \ w {1,1} \ b ";

+1

Sie ca eine Nullreferenz mit Regex nicht erkennen, hat es überhaupt keinen Sinn –

Antwort

0

Vorsicht mit dem, was Sie unter NULL verstehen. In den meisten Programmiersprachen bedeutet dies, dass kein Zeiger, keine Referenz, nicht zugewiesen oder sogar "Null" ist. Eine leere Zeichenfolge ist normalerweise nicht NULL. Es gibt ein Zeichen in der ASCII-Tabelle für NULL am Codepunkt 0, so dass Ihre Idee, \x00 zu tun, das Zeichen NULL erkennen würde.

Wenn Sie nach einer Zeichenfolge ermöglichen null oder leer oder Spiel der Regex zu sein, ich würde vorschlagen, dass die Operationen wie so ...

if (String.IsNullOrEmpty(str) || Regex.IsMatch(str, pattern)) { 
    // null or match. do stuff... 
} 

diese Zerschlagung Versuchen Sie, den Punkt zu illustrieren ...

string s1 = null; 
string s2 = ""; 
string s3 = "\x0"; 

if (s1 == s2) Console.WriteLine("s1 == s2"); 
if (s1 == s3) Console.WriteLine("s1 == s3"); 
if (s2 == s3) Console.WriteLine("s2 == s3"); 
0

Fügen Sie (...)? hinzu, um auch leere Zeichenfolgen zu finden. Sie können nicht

var r=new Regex(@"(^[a-zA-Z0-9]\d{2}a-zA-Z0-9{2}[A-Za-z0-9]$|[^\x00-\x80]|\b\w{1,1}\b)?"); 

var isMatchWhenEmpty = r.IsMatch(string.Empty); // zu Regex.Ismatch() oder Regex.Matches() null als Texteingabe übergeben kehrt wahr

var result = r.IsMatch(null); // wirft Nullreferenceexception

So zusätzliche Validierung hinzu:

var isMatch = string.IsNullOrEmpty(input) || r.IsMatch(input);