Я пытаюсь выполнить команду regexp, но она не работает. Как я могу сделать это работоспособным? - PullRequest
1 голос
/ 14 июня 2019

Я получаю ложь. Почему не работает regex.exec?

Как сделать так, чтобы цикл if выполнялся?

const result = {
   latitude: 23.07696461,
   longitude: 72.59447369
};
const regex = new RegExp("^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,6}");
if(regex.exec(result.latitude) && regex.exec(result.longitude)){
    console.log('if  block');
}
else{
    console.log('else  block');
}

Ответы [ 3 ]

1 голос
/ 14 июня 2019

Основная проблема заключается в том, что вы пытаетесь проверить 6 значащих цифр, а не 8, как вы видите в своих примерах.

Простой способ решить эту проблему - изменить регулярное выражение так, чтобы оно проверяло8 цифр.

const result = {
   latitude: 23.07696461,
   longitude: 72.59447369
};
const regex = /^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,8}/;
if(regex.test(result.latitude) && regex.test(result.longitude)){
    console.log('if  block');
}
else{
    console.log('else  block');
}

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

Однако если предполагается, что это будет тест , то вы должны быть уверены, что тестируете свой тест с канонически достоверными данными.Возможно, широта и долгота должны иметь только 6 цифр?Возможно, они будут переменными?При работе с санацией / проверкой данных важно знать, каковы ваши фактические ограничения / требования к данным, и в идеале не полагаться только на то, что определенные примеры и тесты расскажут вам все, что вам нужно знать.

0 голосов
/ 14 июня 2019

Вы должны использовать двойную обратную косую черту (\\) для обработки \d, иначе она будет интерпретироваться как d char.

Проверьте это сопряжение.

const result = {
   latitude: 23.07696461,
   longitude: 72.59447369
};
const regex = new RegExp("^-?([1-8]?[1-9]|[1-9]0)\.{1}\\d{1,6}");
if(regex.test(result.latitude) && regex.test(result.longitude)){
    console.log('if  block');
}
else{
    console.log('else  block');
}

Примечание: Я изменил exec на test, потому что вам нужно только проверить boolean.

Проверкаэто для более объяснения .

0 голосов
/ 14 июня 2019

Попробуйте функцию теста:

const result = {
   latitude: 23.07696461,
   longitude: 72.59447369
};
const regex = new RegExp("^-?([1-8]?[1-9]|[1-9]0)\.{1}\d{1,6}");
if(regex.test(result.latitude) && regex.test(result.longitude)){
    console.log('if  block');
}
else{
    console.log('else  block');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...