number

by Neo Aptt

HTML

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<textarea class='form-control input-sm' rows="10">Before: 14424, 14(100-103,706), 1488(zip 5-6,3), (129-149,111)</textarea>
<button id="sub">
  submit
</button>
<button id="re">
  Reset
</button>
<p class="help-block">
  <br>Before: 14424, 14(100-103,706), 1488(zip 5-6,3), (129-149,111)
  <br>After: 14100,14101,14102,14103,14424,14706,14883,14885,14886
</p>

JavaScript

$('#sub').click(function() {
  var $results = rangeParser($('textarea').val());
  if ($results[1]) {
    $('textarea').val($results[0]);
  } else {
    $('textarea').val($results[0] + ' = ' + $results[2]);
  }

});
$('#re').click(function() {
  $('textarea').val('Before: 14424, 14(100-103,706), 1488(zip 5-6,3), (129-149,111)');
});

function rangeParser(zip_codes) {
  var valid = true;
  var formated = zip_codes.replace(/[^\d()\-,]+/g, '');
  var final_result = '';
  var invalidtext = '';
  /*if begins with digit*/
  if (/^\d/.test(formated)) {
    var newString = '';
    var openLeft = false;
    for (var i = 0, len = formated.length; i < len; i++) {
      if (formated[i] === '(') {
        if (openLeft) {
          /*if two left parentheses are open, then it's invalid*/
          valid = false;
          invalidtext = 'Nested parentheses';
          break;
        } else {
          openLeft = true;
          newString += formated[i];
        }
      } else if (formated[i] === ')') {
        if (openLeft) {
          openLeft = false;
          newString += formated[i];
        } else {
          /*if no left parentheses are open and you close it with a right parenthese, the it's invalid*/
          valid = false;
          invalidtext = 'Parentheses closed before opened';
          break;
        }
      } else if (formated[i] === ',') {
        if (openLeft) {
          /*if you are between parentheses then use the '|' as a deliminator to be split latter*/
          newString += '|';
        } else {
          newString += ',';
        }
      } else {
        newString += formated[i];
      }
    }
    if (valid) {
      /*splits the string into seperate equations*/
      var newArray = newString.split(',');
      var append = '';
      var substr = [];
      var smsplit = [];
      var addtome = [];
      var addnext = '';
      for (var i = 0, len = newArray.length; i < len; i++) {
        if (/[^\d]/g.test(newArray[i])) {
          if...