Показывает ввод, который позволяет только числа и десятичную точку?

Есть ли способ определить <input>, который показывает ввод с клавиатуры, который разрешает только числа и десятичную точку (или запятую для международных пользователей)?

<input type='tel'> показывает, что телефонная дерьмо мне не нужна, и нет десятичной точки
<input type='number' pattern='[0-9]*'> показывает все числа, но без десятичной точки

Что я могу сделать, чтобы получить нужные мне данные?

Ответ 1

Если вы делаете это в истинном приложении iOS, вы, вероятно, можете добавить собственные кнопки поверх клавиатуры на основе этого вопроса, что об аксессуаре, но тот же процесс будет работать.

В противном случае IamChuckB прав, а пять типов клавиатуры, указанные в библиотеке разработчиков Apple, являются исчерпывающими.

Ответ 2

Вы можете попробовать этот атрибут в поле type = "number":

pattern="\d+(\.\d*)?"

это позволит использовать только цифры с/без десятичной точки и плавающие числа справа.

Ответ 3

См. мой проект кросс-браузерного фильтра значения элемента ввода текста на вашей веб-странице с использованием языка JavaScript: Input Key Filter. Вы можете отфильтровать значение как целое число, число с плавающей запятой или написать собственный фильтр, например, фильтр телефонных номеров. См. Пример кода ввода числа с плавающей запятой

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Input Key Filter Test</title>
	<meta name="author" content="Andrej Hristoliubov [email protected]">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
	
	<!-- For compatibility of IE browser with audio element in the beep() function.
	https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
	<meta http-equiv="X-UA-Compatible" content="IE=9"/>
	
	<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">		
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
	<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
	
</head>
<body>
	<h1>Float field</h1>
Float field: 
<input id="Float"
	onchange="javascript: onChangeFloat(this)"
	onblur="inputKeyFilter.isNaN(parseFloat(this.value), this);"
/>
<script>
	CreateFloatFilter("Float");
	
	function onChangeFloat(input){
		inputKeyFilter.RemoveMyTooltip();
		var elementNewFloat = document.getElementById("NewFloat");
		var float = inputKeyFilter.parseFloat(input.value);
		if(inputKeyFilter.isNaN(float, input)){
			elementNewFloat.innerHTML = "";
			return;
		}
		elementNewFloat.innerHTML = float + " or localized value: " + float.toLocaleString();
	}
</script>
 New float: <span id="NewFloat"></span>
</body>
</html>

Ответ 4

= > Это позволит использовать только одну десятичную точку (.)

= > Он будет разрешать только трехзначные десятичные значения после точки. вы можете изменить, изменив значение на {1,3} на значение ниже RegEx.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string  {

        if (!string.length)
            return YES;

        NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
        NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,3})?)?$";
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                               options:NSRegularExpressionCaseInsensitive
                                                                                 error:nil];
        NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                            options:0
                                                              range:NSMakeRange(0, [newString length])];
        if (numberOfMatches == 0)
            return NO;


        return YES;

    }