Что не так в приведенном ниже коде проверки ввода?

#javascript #reactjs #regex

#javascript #reactjs #регулярное выражение

Вопрос:

Я пытаюсь проверить текстовое поле ввода, которое должно содержать только символы. Я использую test() здесь. В идеале он должен возвращать true, когда в поле задается строка типа «rent», но в каждом случае это происходит по сценарию false. Может кто-нибудь, пожалуйста, подсказать, почему это происходит. Я попробовал отладку и обнаружил, что значения поступают нормально в операторе if. Пожалуйста, помогите.

     const [text,setText] = useState(" ")
    const [amount,setAmount] = useState(0)
  
    const {addTransaction} = useContext(GlobalContext)
    console.log(text,amount)


   const onSubmit = e =>{
   e.preventDefault(); 
   var letters = /^[A-Za-z] $/;
  
   if(letters.test(text)){
   const newTransantion = {
   id: Math.floor(Math.random() * 10000000),
   text:text,
   amount: amount
   } 
   addTransaction(newTransantion)
  }
  else{
    alert('Please give the correct input')
  }
}
  

Комментарии:

1. Невозможно увидеть, где ошибка, без полного примера. Особенно нужно знать, где setText вызывается. если это каким-то образом вызывается на другом конце addTransaction функции, то строка по умолчанию " " никогда не будет передавать ваше регулярное выражение, и текст никогда не будет обновляться..

Ответ №1:

Я думаю, что тестовая функция регулярных выражений работает правильно.
Вот пример. Я бы вставил несколько отладочных отпечатков вокруг кода.

 var text = ["hello", "world", "4rent",
 "Howdy", "Buy", " spaces oh ", "99Bb"];

// Validation regex
var letters = /^[A-Za-z] $/;

// Test validate our array values
//
for (const element of text) 
   if ( letters.test( element ) ) 
      console.log( element   " - passed" );
   else
      console.log( element   " - failed" );

console.log( "nnn" );  

Ответ №2:

Я предполагаю, что в функции onSubmit переменная состояния «text» все время является пустой строкой.

Имеет ли текстовое поле ввода (которое мы здесь не видим) атрибут onChange?? какой должна быть функция, обновляющая состояние «текст» после каждого хода.