galadrielmap_sk
Version:
a server-based chartplotter navigation software for pleasure crafts, motorhomes, and off-road cars. It's can be used on tablets and smartphones without install any app. Only browser need.
70 lines (58 loc) • 1.81 kB
JavaScript
var Validator;
Validator = class Validator {
isValid(coordinates) {
var isValid, validationError;
isValid = true;
try {
this.validate(coordinates);
return isValid;
} catch (error) {
validationError = error;
isValid = false;
return isValid;
}
}
validate(coordinates) {
this.checkContainsNoLetters(coordinates);
this.checkValidOrientation(coordinates);
return this.checkNumbers(coordinates);
}
checkContainsNoLetters(coordinates) {
var containsLetters;
containsLetters = /(?![neswd])[a-z]/i.test(coordinates);
if (containsLetters) {
throw new Error('Coordinate contains invalid alphanumeric characters.');
}
}
checkValidOrientation(coordinates) {
var validOrientation;
validOrientation = /^[^nsew]*[ns]?[^nsew]*[ew]?[^nsew]*$/i.test(coordinates);
if (!validOrientation) {
throw new Error('Invalid cardinal direction.');
}
}
checkNumbers(coordinates) {
var coordinateNumbers;
coordinateNumbers = coordinates.match(/-?\d+(\.\d+)?/g);
this.checkAnyCoordinateNumbers(coordinateNumbers);
this.checkEvenCoordinateNumbers(coordinateNumbers);
return this.checkMaximumCoordinateNumbers(coordinateNumbers);
}
checkAnyCoordinateNumbers(coordinateNumbers) {
if (coordinateNumbers.length === 0) {
throw new Error('Could not find any coordinate number');
}
}
checkEvenCoordinateNumbers(coordinateNumbers) {
var isUnevenNumbers;
isUnevenNumbers = coordinateNumbers.length % 2;
if (isUnevenNumbers) {
throw new Error('Uneven count of latitude/longitude numbers');
}
}
checkMaximumCoordinateNumbers(coordinateNumbers) {
if (coordinateNumbers.length > 6) {
throw new Error('Too many coordinate numbers');
}
}
};