通过浏览stackoverflow,我设法在我的<input>
上写了这段代码
onkeyup="this.value = this.value.replace(/[qwertyuopasdfghjklzxcvbnm ]/g, '')"
i打算限制键盘,但字母 i ,-和 0 - 9 中的数字除外。它对我的程序正常工作,但是有没有更干净的方式编写此代码?
答案 0 :(得分:5)
您不必指定要删除的字符集,因为您只有几个字符要包含 ,而是可以使用负字符集来指定这些字符:
export default function* userSaga() {
yield all([takeEvery(UserTypeKeys.SET_AUTHENTICATION_STATUS, fetchAuthenticationStatus)]);
}
如果可能的话,您还应该考虑使用Java脚本而不是使用内联处理程序来正确附加事件监听器:
test('Test Root Saga', async () => {
const saga = runSaga(mockStore, userSagas.default);
const fetchAuthStatusMock = jest.spyOn(userSagas, 'fetchAuthenticationStatus');
mockStore.dispatch({ type: UserTypeKeys.SET_AUTHENTICATION_STATUS });
saga.cancel();
await saga.done;
expect(fetchAuthStatusMock.mock.calls.length).toBe(1);
});
另一个可能的改进是在this.value = this.value.replace(/[^i0-9-]/g, '')
事件上使用const input = document.querySelector(<input selector>);
input.addEventListener('keyup', function() {
this.value = this.value.replace(/[^i0-9-]/g, '');
});
,而不是使不良字符显示一秒钟然后在瞬间消失:
preventDefault
keypress
(尽管以上内容仍然允许通过粘贴和单击拖动等方式输入这些字符,所以当这些事件被触发时,您将不得不诉诸const input = document.querySelector('input');
input.addEventListener('keypress', function(e) {
if (!/[i0-9-]/.test(e.key)) {
e.preventDefault();
}
});
方法)