Jquery: Как разрешить только цифры / плавающие с запятой (даже при копировании) в поле ввода текста с помощью jQuery? - PullRequest
1 голос
/ 03 апреля 2020

Это мой код, он не работает должным образом. Это может быть дублировано с "+++" или "---". Я могу предотвратить это, но это только увеличивает валидацию. Есть ли лучший способ? Можно ли оптимизировать код?

var regexNumber = /^\$?(((\d)\,?)+)?((\d)+)(\.(\d)+)?$/;
$("#" + element).keydown(function (event) {

                        // Allow only backspace, delete, dot, arrow key, tab, shift+tab
                        if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 190 || (event.keyCode>=37 && event.keyCode<=40) || event.keyCode==9 || event.keyCode==16) {
                            // let it happen, don't do anything                           
                        }
                        else {
                            // Allow copy, paste, select all only numbers 
                            if (((event.keyCode == 65 || event.keyCode == 86 || event.keyCode == 67) && (event.ctrlKey === true || event.metaKey === true))) {
                                if (event.originalEvent.clipboardData.getData('Text').match(regexNumber) == null) {
                                    event.preventDefault();
                                }
                            }
                            // Ensure that it is a number and stop the keypress

                            if (event.keyCode < 48 || event.keyCode > 57) {
                                event.preventDefault();
                            }
                        }
                    });

Он не должен позволять: 1. Буквы 2. Вставлять данные, имеющие буквы

Он должен позволять: 1. Цифры с запятой 2. Плавать 3. Вкладка , Shift + Tab 4. Ctrl + A, C, X, V 5. Backspace, Delete 6. Клавиши со стрелками 7. Вставка данных с запятой и плавающей точкой

Я думаю, что регулярное выражение для проверки букв и специальных символы кроме (. (точка) и, (запятая)) в строке и не разрешать их будет работать нормально? Но я не понимаю, каким должно быть регулярное выражение?

Я не имею большого представления о регулярном выражении.

Я искал похожие вопросы, в моей проверке они пропускали некоторые случаи.

1 Ответ

1 голос
/ 03 апреля 2020

Это мое решение:

	<html>
		<head>
			<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
			<script>
				var blackList=/[a-zA-Z]+/g;
				var whiteList=/[\d,\.]+/g;
				$( document ).ready(function() {
					$("#inputBox").keypress(function (event) {
						return (event.key.match(whiteList)!=null)
					});
					$("#inputBox").on("paste", function(e){
						var pasteData = e.originalEvent.clipboardData.getData('text');
						return (pasteData,pasteData.match(blackList)==null);
					});
				});
				
			</script>
		</head>
		<body>
			<textarea>
			Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
			</textarea><br>
			<textarea id="inputBox">
			</textarea>
			<div id="result">
			Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
			</div>
		</body>
	</html>

Я фиксирую событие "onkeypress", чтобы проверить нажатие клавиши. Кроме того, я фиксирую событие «onpaste» для предотвращения ввода пользователем символа из буфера обмена.

Это потому, что я не блокирую вводимый символ с помощью кода клавиши, поэтому специальный символ (например, ctrl- c) ) не должно быть затронуто.

Согласно документации jQuery ,

Событие нажатия клавиши отправляется элементу, когда браузер регистрирует ввод с клавиатуры. Это похоже на событие нажатия клавиш, за исключением того, что модификатор и непечатаемые ключи, такие как Shift, Es c, и удаляют события нажатия клавиш запуска, но не события нажатия клавиши. Другие различия между этими двумя событиями могут возникать в зависимости от платформы и браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...