有一個任務:“First Name Last Name”欄位只能包含 2 個單詞(名字和姓氏)。每個單詞的最小長度為 3 個字符,最多 30 個字符。單詞之間只有 1 個空格。
問題是在第一個單詞之后,當你放一個空格時,它已經回傳 true。為什么?以及如何檢查此輸入中的 1 個空格?
const validateInput = (value) => {
const lengthValue = value.split(' ').length
if (lengthValue !== 2) {
return false
} else {
return value.split(' ').filter(el => el.length > 3 && el.length <= 30) ?
value.search(/[A-Za-z] (\s [A-Za-z] )?/gi) !== -1 ?
true :
false :
''
}
}
uj5u.com熱心網友回復:
- 測驗前使用 trim 洗掉單詞周圍的空格
- 退貨后無需其他。也更容易閱讀
- 你為什么要測驗名稱中的單詞是否有空格?這僅在用戶粘貼換行符或制表符時才有效,因為您在空間上拆分
- 你有一個嵌套的三元組,為什么要在那里回傳一個空字串?
也請閱讀本文以了解程式員對名稱的未來謊言
const re = /[A-Za-z]{3,30}/;
const validateInput = (value) => {
const val = value.trim();
if (val === "") return false;
const arr = value.split(' ');
if (arr.length != 2) return false;
const [firstName, lastName] = arr;
return re.test(firstName) && re.test(lastName); // we could use .every here but you only have two
}
console.log(validateInput("Hans Anders"));
console.log(validateInput("Prince"));
console.log(validateInput("X ? A-12"));
console.log(validateInput(" A "));
uj5u.com熱心網友回復:
你可以檢查是否沒有。of words 小于等于 2 并且所有單詞的長度都在指定的范圍內。
const message = document.querySelector("small");
document.querySelector("input").addEventListener("keyup", (e) => {
const isValid = validateInput(e.target.value);
if (isValid) {
message.textContent = "Valid input";
} else {
message.textContent = "Invalid input";
}
});
const validateInput = (input) => {
const words = input.split(" ");
return words.length <= 2 && words.every((w) => /^[A-Za-z]{3,30}$/.test(w));
};
<div>
<label>
Name:
<input type="text" />
</label>
</div>
<small>Invalid input</small>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496168.html
標籤:javascript 反应 正则表达式
