Skip to content

Instantly share code, notes, and snippets.

@hudsonmendes
Created April 4, 2017 21:02
Show Gist options
  • Save hudsonmendes/b92830c0a95cafc610ed61ccd267d286 to your computer and use it in GitHub Desktop.
Save hudsonmendes/b92830c0a95cafc610ed61ccd267d286 to your computer and use it in GitHub Desktop.
PhoneNumberFormatter.cs (Fixed)
using System.Text.RegularExpressions;
using System.Linq;
using System.Text;
namespace Sample
{
public class PhoneNumberFormatter
{
private readonly string number;
public PhoneNumberFormatter(string number)
{
this.number = number;
}
public string Format()
{
var cleanNumber = GetCleanedNumber(number);
if (!string.IsNullOrWhiteSpace(number))
{
var reversed = GetReversedNumber(cleanNumber);
var formatted = getReversedFormatted(reversed);
var ordered = GetReversedNumber(formatted);
return WrapValue(ordered);
}
else
return string.Empty;
}
private static string WrapValue(char[] ordered)
{
return new string(ordered).Trim(new[] { '-' });
}
private static string getReversedFormatted(char[] reversedNumber)
{
var output = new StringBuilder();
for (int i = 0; i < reversedNumber.Count(); i++)
{
output.Append(reversedNumber[i]);
if (ShouldBreakGroup(i)) output.Append("-");
}
return output.ToString();
}
private static bool ShouldBreakGroup(int i)
{
// breakes the group every 4 numbers
return (i + 1) % 4 == 0;
}
private static char[] GetReversedNumber(string number)
{
return number
.ToCharArray()
.Reverse()
.ToArray();
}
private static string GetCleanedNumber(string number) {
if (number != null)
number = Regex.Replace(number, "[^0-9]", string.Empty);
return number.Trim();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment