卢小七的刷题笔记(js)

题目来源: Codewars

题目: Coordinates Validator

题目难度: 4kyu(理论上难,实际本题不是很难)

You need to create a function that will validate if given parameters are valid geographical coordinates.

Valid coordinates look like the following: "23.32353342, -32.543534534". The return value should be either true or false.

Latitude (which is first float) can be between 0 and 90, positive or negative. Longitude (which is second float) can be between 0 and 180, positive or negative.

Coordinates can only contain digits, or one of the following symbols (including space after comma) -, .

There should be no space between the minus "-" sign and the digit after it.

Here are some valid coordinates:

. -23, 25
. 24.53525235, 23.45235
. 04, -23.234235
. 43.91343345, 143
. 4, -3

And some invalid ones:

. 23.234, - 23.4234
. 2342.43536, 34.324236
. N23.43345, E32.6457
. 99.234, 12.324
. 6.325624, 43.34345.345
. 0, 1,2
. 0.342q0832, 1.2324

个人理解(其实不用翻译)

寻找坐标集合,第一个为纬度,范围[-90,90];第二个为经度,范围[-180,180],如果是负的,负号与后面的数字没有空格,不允许出现字母.

解法:要么从正面验证,要么从反面排除

function isValidCoordinates(coordinates) {
    //以','分割后的长度不为2的排除
    if (coordinates.split(',').length != 2) {
        return false
    }
    //取出'纬度'和'精度'
    latitude = coordinates.split(',')[0]
    longitude = coordinates.split(',')[1]
    //'纬度'或'精度'中包含字母的排除
    if (latitude.search(/[a-zA-z]|' '/) >= 0 || longitude.search(/[a-zA-z]|' '/) >= 0) {
        return false
    }
    //取绝对值方便使用
    latitude = Math.abs(latitude)
    longitude = Math.abs(longitude)
    //超出范围的排除.在使用Math.abs后部分会出现NaN:
    //中间包含'-',' '的情形,也需要排除
    if (isNaN(latitude) || latitude > 90 || isNaN(longitude) || longitude > 180) {
        return false
    }
    return true;
}

再说几句: 做完也没认真去想,在查看了Codewars上网友的答案后,发现上述的排除过程除了最后一步,都是可以通过正则实现(最后一步也不会出现判断NaN的情况),实际最后只需要判断范围(未联系相关答案作者,所以没有贴出代码)

正则表达式是个好东西!!!

你可能感兴趣的:(卢小七的刷题笔记(js))