Так что у меня есть этот код, который я хочу иметь возможность ограничить то, что можно сказать в окне подсказки, используя 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]+$/){
}
}
Вы просто сравниваете первые 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()
/^[A-Za-z][A-Za-z][A-Za-z].*/
, которая является /^[ /^[A-Za-z]{3}.*/
используйте {3}
для указания количества шаблона.
У меня сложилось впечатление, что вы чувствуете, как проходите через это сейчас, и вы многое можете сделать, чтобы сделать ваш код более безопасным и более эффективным в целом. Циклы while - опасный способ убить время для начала.
С точки зрения вашей проблемы с регулярным выражением, попробуйте использовать .test, если вы ищете логический (истина или ложь) ответ на ваш тест регулярного выражения.
Например
/([AZ]|[az])/.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 */
}
так
Вы можете попробовать приведенный ниже код.
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)){
}
}
Используя это регулярное выражение ^[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();