Я пытаюсь создать простую программу обработки строк, но у меня возникают проблемы.

ЧТО ДОЛЖНА ДЕЛАТЬ ПРОГРАММА:

  • Поле enteredname должно иметь хотя бы один пробел, но не в первой позиции.
  • Поле enteredname должно где-то содержать слово "miller" в любом случае.
  • Поле State должно состоять всего из двух символов.
  • Поле Zip должно начинаться с '45'.
  • Наконец, поле streetaddress не обязательно должно содержать слово "улица", но если оно есть, его следует изменить на "Улица".

НЕ РАБОТАЕТ:

В настоящее время работает все, кроме проверки названия улицы.

МЕСТО ОШИБКИ:

if (streetaddress.toLowerCase().indexOf("street") == -1)

Текущий код:

//need to initialize to empty strings
var enteredname = "";
var streetaddress = "";
var city = "";
var state = "";
var zip = "";

function ValidateandDisplay() {
  enteredname = document.getElementById("NameTextBox").value;
  streetaddress = document.getElementById("StreetAddressTextBox").value;
  city = document.getElementById("CityTextBox").value;
  state = document.getElementById("StateTextBox").value;
  zip = document.getElementById("ZipTextBox").value;

  var isValid = CheckEntries(); // call isValid function here that will
  //                  perform all validation and return with a true or false from CheckEntries
  if (isValid) {
    //string to display
    var correctentries = enteredname + "<br/>" +
      streetaddress + "<br/>" + city + ", " + state + " " + zip;
    document.getElementById("AddressDiv").innerHTML = correctentries;
  }

}

function CheckEntries() {
  //perform all checks here
  //use separate ifs to determine each validation requirement
  // alerting the user to the particular problem if something didn't
  // pass validation and returning with a false
  // ALL of your validation MUST be above the return true statement below
  // it will only get to THIS return if all validation (conditions) were ok
  if (enteredname[0] == ' ')
        {
            alert("First position in name field can not be a space.")
            return false;
        }
        if (enteredname.indexOf(" ") == -1)
        {
            alert("no spaces found in entry.")
            return false;
        }
        if (enteredname.toLowerCase().indexOf("miller") == -1)
        {
            alert("miller is not in name field.")
            return false;
        }
        if (state.length != 2)
        {
            alert("State field must be only two characters long.")
            return false;
        }
        if (zip[0] != '4' || zip[1] != '5')
        {
            alert("Zip field must start with 45.")
            return false;
        }
        if (streetaddress.toLowerCase().indexOf("street") == -1)
        {
            streetaddress.replace("street", "Street");
            return true;
        }
        else
           return true;

    }
Name: <input id="NameTextBox" type="text" /> FirstName LastName with a space between<br /> Street Address: <input id="StreetAddressTextBox" type="text" /> <br /> City: <input id="CityTextBox" type="text" /> <br /> State: <input id="StateTextBox" type="text"
/> <br /> Zip: <input id="ZipTextBox" type="text" /> <br />
<input id="Button1" type="button" value="Validate Entries" onclick="ValidateandDisplay()" />
<div id="AddressDiv">If entered correctly, your address will display here.</div>

<input id="Button1" type="button" value="Split a String" onclick="SplitThis()" />
-1
jeantaylor2021 21 Сен 2021 в 20:06

2 ответа

Лучший ответ
  1. Индексы строки (массива) начинаются с 0
  2. state.length> 2 ==> должно быть "не равно"
  3. (zip [-1]! = '4' && zip [0]! = '5') => Это должно быть ИЛИ. И индексы неправильные
  4. В последнем утверждении if отсутствуют кавычки
0
Tigl 21 Сен 2021 в 17:28

Я показал вам свой пример, как я это сделал, и вы можете перечитать и сравнить свой и мой код, также я включил туда несколько комментариев, чтобы вы поняли

//Some DOM Elements
const name = document.querySelector(".name")
const state = document.querySelector(".state")
const zip = document.querySelector(".zip")
const address = document.querySelector(".address")

const btn = document.querySelector("button")
const result = document.querySelector("p")

//Object where we will pass some properties to put them after as a text
const resultObject = {}

//words that we must change from "sTREEt" -> "Street' from example
const specialWords = ["avenue", "street"]

//Button Click Function
function checkValues() {
  //.trim() removes whitespaces from text
  //and we split them where are the spaces 
  //for example "He llo" -> ["He", "llo"]
  const nameSplited = name.value.trim().split(" ") //spaces
  const zipSplited = zip.value.trim().split("")//by characters

  if (!nameSplited.length > 2) {//if space length goes up to 2
    alert("Your Name must contain at least on space")
  } else if (!name.value.includes("miller")) {//if text doesn't include miller
    alert("Your name input must include Miller")
  } else if (zip.value.trim().substring(0, 2) !== "45") {//if Zip doesnt start with 45
    alert("Your zip must be started with '45'")
  } else { // if everything passese well
    const addressSplited = address.value.split(" ") //splitting address by spaces

    for (let i = 0; i < addressSplited.length; i++) {//checking if any of the address text includes that our special words by lowercase
      if (specialWords.includes((addressSplited[i].toLowerCase()))) {
        const correct = addressSplited[i].toLowerCase() //if yes we convert it as a lowercase
        const firstLetter = correct.substring(0, 1).toUpperCase()//taking first letter from word and make it uppercase -> "Street" -> "S"

        const lastResult = firstLetter + correct.slice(1) // adding our "S" to "treet" 
        addressSplited[i] = lastResult //and pass that our result word in array

        resultObject.name = name.value
        resultObject.state = state.value
        resultObject.zip = zip.value
        resultObject.address = addressSplited.join(" ") //converting back our array as normal text

        result.innerHTML = `
        name: ${resultObject.name}
        
        state: ${resultObject.state}
        
        zip: ${resultObject.zip}
        
        address: ${resultObject.address}
        `
      }

    }
  }
}

btn.addEventListener("click", checkValues)
<div>
  <input placeholder="name" class="name" type="text">
</div>
<div>
  <input placeholder="state" class="state" type="text" maxlength="2">
</div>
<div>
  <input placeholder="Zip" class="zip" type="text">
</div>
<div>
  <input placeholder="address" class="address" type="text">
</div>
<button>Submit</button>

<p></p>
0
callmenikk 21 Сен 2021 в 18:34