2016-07-08 6 views
0

IpAddressListと192.168.0.5などのIPアドレスを持つリストがあります。正規表現:ワイルドカードによるユーザ入力に対してIPアドレスを確認する

ユーザーが

*また、ワイルドカードを使用することにより、与えられたIPアドレスのリストを検索することができますこれは私の方法である:

public bool IpAddressMatchUserInput(String userInput, String ipAddressFromList) 
{ 
    Regex regex = new Regex(""); 

    Match match = regex.Match(ipAddressFromList); 

    return match.Success; 
} 

userInputは、たとえばことができます。

  • 192.168.0。*
  • 192.
  • 192.168.0.5
  • 192。*。* 0

すべての場合において、この方法は、trueを返す必要がありますが、私はuserInputとの組み合わせで正規表現を使用する方法がわからないとどのように正規表現がすべき見てください。

+0

これは有効な入力192です。*。0. *? – user3185569

+0

@ user3185569はいそれは次のとおりです。 – Maddy

+0

以下の確認の回答。 – user3185569

答えて

2

私は、これは(も192.*.0.*をカバーする)動作するはずだと思う:

public static bool IpAddressMatchUserInput(String userInput, String ipAddressFromList) 
{ 
    Regex rg = new Regex(userInput.Replace("*", @"\d{1,3}").Replace(".", @"\.")); 

    return rg.IsMatch(ipAddressFromList); 
} 
+1

彼はたぶん '.'を' \ .'に置き換えて、それをエスケープしてそのまま扱うべきです。 –

+0

@UweKeimこれを置き換える方法を教えてください。 – Maddy

+1

@Maddy done、編集を確認します。 – user3185569

0

ここではユーザ入力は、このような\、または対応しないカッコなどの正規表現のメタ文字が含まれている場合は破壊しないより堅牢なバージョンです:

public static bool IpAddressMatchUserInput(string userInput, string ipAddressFromList) 
{ 
    // escape the user input. If user input contains e.g. an unescaped 
    // single backslash we might get an ArgumentException when not escaping 
    var escapedInput = Regex.Escape(userInput); 

    // replace the wildcard '*' with a regex pattern matching 1 to 3 digits 
    var inputWithWildcardsReplaced = escapedInput.Replace("\\*", @"\d{1,3}"); 

    // require the user input to match at the beginning of the provided IP address 
    var pattern = new Regex("^" + inputWithWildcardsReplaced); 

    return pattern.IsMatch(ipAddressFromList); 
} 
関連する問題