我有很多高度,以英寸为单位,如果它们处于其他高度之间,则需要进行检查。但是,数据并非100%完美;有时,该数字显示为5'5"
,有时显示为5' 5"
(带空格)。它之间出现的高度也会有所不同,有时候看起来像5'5" - 5'10"
,有时像5' 5"-5' 10"
,有时像5'5"-5' 10" Height
......你明白了。
因此,我正在尝试构建一个函数,该函数将采用5'5"
之类的数字,并确认true
或false
该数字介于格式{{之间的高度范围之间1}}。
5' 5"-5' 10"
答案 0 :(得分:2)
这使用了类似的正则表达式,但删除了^
和$
,因此匹配可以在任何地方发生,并添加\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
&#13;
答案 1 :(得分:0)
我在this link使用建议的正则表达式找到了这个。
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");