Здесь я предоставляю свой код, в котором я хочу вводить символы в поле ввода пароля, и я хочу не вводить в него пробел/пробел, но вместо этого он также входит внутрь него, когда я печатаю входное значение, тогда он не содержит пробел/пробел. Пожалуйста, помогите мне решить проблему.
Код -
import React from "react";
import ReactDOM from "react-dom";
import "./styles.css";
import { Form, Input, Label } from "semantic-ui-react";
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
inputFieldData: {
pass: {
val: "",
error: false
}
}
};
}
inputChange = e => {
// prevent not to enter space charactes in password field while registering
const re = /^\S*$/;
let inputFieldData = this.state.inputFieldData;
const name = e.target.name;
if (re.test(e.target.value)) {
inputFieldData[name]["val"] = e.target.value;
console.info(e.target.value);
}
this.setState({ inputFieldData });
};
render() {
const { inputFieldData } = this.state;
return (
<div className = "App">
<h1>Input box does not contain space in it</h1>
<h3>Input Value: {inputFieldData["pass"]["val"]}</h3>
<Form className = "register-form">
<Form.Field>
<Input
type = "password"
icon = "user circle"
name = "pass"
iconPosition = "left"
placeholder = "Enter Password"
onChange = {this.inputChange}
error = {inputFieldData["pass"]["error"]}
/>
{inputFieldData["pass"]["error"] && (
<Label basic color = "red" pointing>
Field can not be empty
</Label>
)}
</Form.Field>
</Form>
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Вы можете просто обнаружить пробел, см. это
Я знаю, но я не хочу использовать trim(). Я хочу не вводить символ пробела в поле ввода. @Вулуу
Я попробовал ваш метод, прежде чем задавать этот вопрос, но он мне не помог. @TusharWalzade



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно установить значение ввода на inputFieldData.pass.val,
в противном случае это не привязан к состоянию вашего компонента.
<Input
value = {inputFieldData.pass.val}
type = "password"
icon = "user circle"
name = "pass"
iconPosition = "left"
placeholder = "Enter Password"
onChange = {this.inputChange}
error = {inputFieldData["pass"]["error"]}
/>
Вам нужно использовать шаблон контролируемого компонента (см. здесь https://reactjs.org/docs/forms.html#управляемые-компоненты), добавив свойство value к вашему компоненту input.
Затем вы можете добавить логику обрезки пробелов в свою функцию handleChangeEvent.
Вот пример: https://codesandbox.io/s/kkpr53k36r
Просто сделайте так в функции handleOnChange:
handleOnChange = (e) => {
this.setState({
[e.target.name]: e.target.value.split(" ").join("")
});
};
Я решил эту проблему с регулярным выражением
str.replace(/\s/g, '')
Это работает частично, но он также должен установить значение в полях ввода, так как компонент без значения работает как неуправляемый и у него будет свое состояние.
пусть пользователи вводят свой пароль. Затем вы можете
trim(password)перед вызовом API