Попытка получить приглашение ограничить первые три символа приглашения только буквами - PullRequest
0 голосов
/ 10 января 2019

Итак, у меня есть этот код, который я хочу иметь возможность ограничить то, что можно сказать в окне подсказки, используя javascript. Я использую оператор do и while для выталкивания цикла подсказки, пока подсказка не удовлетворяет требованию, мне разрешено использовать только javascript. Я хочу, чтобы первые три символа окна приглашения были только буквами, однако я думаю, что у меня проблема с моим регулярным выражением! любая помощь будет принята с благодарностью.

   function myFunction() {
  var userInput = new Array();
  var letters = /^[A-Za-z]+$/;
  do {
     userInput = prompt('Enter course code');
     if (userInput.length != 7) {
        alert("The input must contain 7 characters");
     }
     var userInput3 = userInput.substring(0, 3);
     if (userInput3 != /[A-Za-z]+$/){
        alert("The first 3 characters must be letters");
     }
  }
  while (userInput.length != 7 && userInput3 != /[A-Za-z]+$/){
  }

}

Ответы [ 4 ]

0 голосов
/ 10 января 2019

Вы можете попробовать следующий код.

function myFunction() {
  var userInput;
  //var regEx = new RegExp("^[a-zA-Z]{3}.{4}$"); // It Will check for first 3 must be characters and length 7
  var regEx = new RegExp("^[a-zA-Z]{3}"); // It Will check for first 3 must be characters and not check for length
  do {
     userInput = prompt('Enter course code');
     if (userInput.length != 7) {
        alert("The input must contain 7 characters");
     }
     if (!regEx.test(userInput)){
        alert("The first 3 characters must be letters");
     }
  }
  while (userInput.length != 7 && regEx.test(userInput)){
  }

}
0 голосов
/ 10 января 2019

Используя это регулярное выражение ^[a-zA-Z]{3}.{4}$, вы можете достичь его в одном цикле if,

function myFunction() {
  var userInput = new Array();
  do {
     userInput = prompt('Enter course code');
     if (!/^[a-zA-Z]{3}.{4}$/.test(userInput)) {
        alert("The input must contain 7 characters where first 3 characters must be letters");
     }
  }
  while (!/^[a-zA-Z]{3}.{4}$/.test(userInput)){
  }

}

myFunction();
0 голосов
/ 10 января 2019

У меня сложилось впечатление, что вы чувствуете, как проходите через это в настоящий момент, и вы многое можете сделать, чтобы сделать ваш код более безопасным и более эффективным в целом. Циклы while - опасный способ убить время для начала.

С точки зрения вашей проблемы регулярного выражения, попробуйте использовать .test, если вы ищете логический (true или false) ответ на ваш тест регулярного выражения

Например

/([A-Z]|[a-z])/.test(userInput3)

вернет true, если все символы являются буквами от a до z в нижнем или верхнем регистре (| is или).

если вы добавите! перед тестом вы вернете его логическое значение (true станет false и наоборот)

чтобы вы могли пойти:

if (!/([A-Z]|[a-z])/.test(userInput3)){
/* do something if userInput3 contains anything other than the letters a-z in 
   upper or lower case */
}

так

0 голосов
/ 10 января 2019

Вы просто сравниваете первые 3 буквы со строкой '/ [A-Za-z] + $ /'

Попробуйте это

function myFunction() {
  var userInput = new Array();
  var letters = /^[A-Za-z]+$/;
  do {
     userInput = prompt('Enter course code');
     if (userInput.length != 7) {
        alert("The input must contain 7 characters");
     }
     var userInput3 = userInput.substring(0, 3);
     if (!/^[A-Za-z][A-Za-z][A-Za-z].*/.exec(userInput3)){
        alert("The first 3 characters must be letters");
     }
  }
  while (userInput.length != 7 && userInput3 != /[A-Za-z]+$/){
  }

}

myFunction()
...