编写此代码的更简洁方法[限制<input />上的字符]

时间:2019-01-10 01:38:47

标签: javascript html

通过浏览stackoverflow,我设法在我的<input>上写了这段代码

onkeyup="this.value = this.value.replace(/[qwertyuopasdfghjklzxcvbnm ]/g, '')"

i打算限制键盘,但字母 i - 0 - 9 中的数字除外。它对我的程序正常工作,但是有没有更干净的方式编写此代码?

1 个答案:

答案 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(); } });方法)