Wildcard search for domains in C#

by Mads Kristensen 28. September 2006 04:59

At work, we had to do wildcard searches using regular expressions to match allowed domain names. For instance, this expression “*.madskristensen.dk” should match “www.madskristensen.dk”.

So, my boss Jimmi wrote a method that he allowed me to post here. Here are some examples on how to use it:

IsDomainValid( "www.madskristensen.dk" , "*.madskristensen" ); is true

IsDomainValid( "www.madskristensen.dk" , "www.madskristensen*" ); is true

IsDomainValid( "www.madskristensen.dk" , "madskristensen*" ); is false

IsDomainValid( "www.madskristensen.dk" , "*mads*.dk" ); is true
IsDomainValid( "www.madskristensen.dk" , "www.*.dk" ); is true

Here is the method.

/// <summary>

/// Checks if a wildcard string matches a domain

/// </summary>

public static bool IsDomainValid( string domain, string domainToCheck)

{

  if (domainToCheck.Contains( "*" ))

  {

    string checkDomain = domainToCheck;

 

    if (checkDomain.StartsWith( "*." ))

      checkDomain = "*" + checkDomain.Substring(2, checkDomain.Length - 2);

 

    return DoesWildcardMatch(domain, checkDomain);

  }

  else

  {

    return domainToCheck.Equals(domain, StringComparison .OrdinalIgnoreCase);

  }

}

 

/// <summary>

/// Performs a wildcard (*) search on any string.

/// </summary>

public static bool DoesWildcardMatch( string originalString, string searchString)

{

  if (!searchString.StartsWith( "*" ))

  {

    int stop = searchString.IndexOf( '*' );

    if (!originalString.StartsWith(searchString.Substring(0, stop)))

      return false ;

  }

 

  if (!searchString.EndsWith( "*" ))

  {

    int start = searchString.LastIndexOf( '*' ) + 1;

    if (!originalString.EndsWith(searchString.Substring(start, searchString.Length - start)))

      return false ;

  }

 

  Regex regex = new Regex (searchString.Replace( @"." , @"\." ).Replace( @"*" , @".*" ));

  return regex.IsMatch(originalString);

}

You can also use the DoesWildcardMatch method alone.

DoesWildcardMatch( "hello world" , "*world" ); is true

* Only $4.95/month ASP.NET & Windows 2008 + IIS 7 Hosting! FREE SQL Included

Tags:

Server-side

Comments are closed

About the slave

Mads Kristensen Mads Kristensen
Web developer at ZYB and founder of BlogEngine.NET. More...

LinkedIn ZYB Facebook Last.fm Twitter View Mads Kristensen's profile on Technorati

The Lounge

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2008