I did something like this for a small address book application. I found it was easiest to just remove all the symbols and such and apply my own formatting. String formattedNum = num.replaceAll("[\\s.()-]", ""); if (!formattedNum.matches("\\d{10}")) { throw new IllegalArgumentException("Invalid number format: " + num); } String numParserRegex = "(\\d{3})(\\d{3})(\\d{4})"; Pattern pattern = Pattern.compile(numParserRegex); Matcher matcher = pattern.matcher(formattedNum); if (matcher.matches()) { ...