Преобразование футов в 5'5 "в см с JavaScript - PullRequest
0 голосов
/ 27 апреля 2018

У меня много высот в дюймах, которые нужно проверить, если они находятся между другими высотами. Тем не менее, данные не на 100% идеальны; иногда число отображается как 5'5", а иногда 5' 5" (с пробелом). Высота, между которой он появляется, также будет изменяться, выглядя иногда как 5'5" - 5'10", а иногда как 5' 5"-5' 10", а иногда как 5'5"-5' 10" Height ... Вы понимаете.

Таким образом, я пытаюсь построить функцию, которая будет принимать число типа 5'5" и подтверждать либо true, либо false, что число находится в диапазоне высот в формате 5' 5"-5' 10".

function checkHeight(userHeight) {

  var rex = /^(\d+)'(\d+)(?:''|")$/;
  var match = rex.exec(userHeight);
  var feet, inch;

  if (match) {
    feet = parseInt(match[1], 10);
    inch = parseInt(match[2], 10);
    console.log("feet = " + feet + ", inches = " + inch);
  } else {
    console.log("Didn't match");
  }

};

checkHeight("5' 5\"")

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Используется аналогичное регулярное выражение, но удаляются ^ и $, поэтому совпадение может происходить где угодно и добавляется \s*, чтобы между футами и дюймами могло быть любое количество пробелов. Это также делает тест более простым способом и полностью исключает преобразование в cm:

function checkHeight( userHeightStr, heightRangeStr ) {
    const [ userHeight, minHeight, maxHeight ] =
      [ userHeightStr, ...heightRangeStr.split('-') ].map( heightStr => { 
        const [ , feet, inches ] = heightStr.match( /(\d+)'\s*(\d+)(?:''|")/ );
        return feet*12 + +inches;
      } )
    ;
    console.log( 'Heights in inches: ', { userHeight, minHeight, maxHeight } );
    return minHeight <= userHeight && userHeight <= maxHeight;
}

console.log( checkHeight("5' 4\"","5'  5\" - 6' 1\" Height") ); // false
console.log( checkHeight("5' 5\"","5'5\" - 6' 1\" Height") ); // true
console.log( checkHeight("5'10\"","5'5\"-5' 10\"") ); // true
console.log( checkHeight("5'11\"","5'5\"   -5' 10''") ); // false
0 голосов
/ 27 апреля 2018

Я нашел это, используя предложенное регулярное выражение в эту ссылку .

    function checkHeight(userHeight,heightRange) {
      var heightRangeArr = heightRange.replace(/\s/g,'').toLowerCase().replace('height','').split('-');
      var heightRangeStart = heightRangeArr[0];
      var heightRangeFinish = heightRangeArr[1];
      var userHeight = userHeight.replace(/\s/g,'');
      if (convertToCm(userHeight) >= convertToCm(heightRangeStart) && convertToCm(userHeight) <= convertToCm(heightRangeFinish) ) {
        console.log(true);
      } else {
        console.log(false);
      }
    };
    
    function convertToCm(inchInput) {
      var rex = /^(\d+)'(\d+)(?:''|")$/;
      var match = rex.exec(inchInput);
      var feet, inch;
    
      if (match) {
        feet = parseInt(match[1], 10);
        inch = parseInt(match[2], 10);
      } else {
        console.log("Didn't match");
      }
      cmConvert = ((feet * 12) + inch)*2.54;
      console.log('*** *** ***');
      console.log(cmConvert);
      return cmConvert;
    }
    
    checkHeight("5' 5\"","5'5\"-5' 10\" Height");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...