我正在使用一個應(yīng)該驗證用戶名的正則表達式。用戶名只能包含英文字母、數(shù)字或下劃線??蛻舳舜a輸入按預(yù)期工作,不允許除字母、數(shù)字和取消劃線之外的任何內(nèi)容: <input type="text" name="username" id="username" required minlength="2" maxlength="14" pattern="[A-Za-z0-9_]+" class="form__input" />當(dāng)我嘗試提交包含 的用戶名時!,瀏覽器驗證不允許這種情況發(fā)生?,F(xiàn)在,在我的服務(wù)器端(Express 應(yīng)用程序 + 是的)我使用相同的正則表達式,但是,它沒有按預(yù)期工作: const shema = yup.object().shape({ username: yup .string() .required() .trim() .min(2) .max(14) .matches(/[A-Za-z0-9_]+/, 'Only English letters, numbers, and underscore allowed (2-14 characters)')})當(dāng)我使用 Postman 并使用包含的用戶名發(fā)送發(fā)布請求時!,驗證不起作用。所有其他字段均按預(yù)期驗證,因此,我的正則表達式可能存在問題?謝謝。
1 回答

侃侃爾雅
TA貢獻1801條經(jīng)驗 獲得超16個贊
在 HTML 中,模式屬性隱式地跨越輸入值的整個長度- 就好像它的兩端都有不可見的^和s 。$例如:
<form>
<button>submit will fail because more than one digit exists in the input</button>
<input pattern="\d" value="123">
</form>
要使服務(wù)器上的模式執(zhí)行與客戶端上執(zhí)行的邏輯相同的邏輯,請使用:
.matches(/^[A-Za-z0-9_]+$/
或者,更好的是,使用\w
,它匹配字母、數(shù)字和_
字符:
.matches(/^\w+$/
您也可以在客戶端上執(zhí)行此操作:
<form>
<button>submit</button>
<input pattern="\w+">
</form>