#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?? какой должна быть функция, обновляющая состояние «текст» после каждого хода.