JavaScript 正则表达式中的 type=number 和 type=text 有什么区别?
What is difference between type=number and type=text in JavaScript regex?
脚本必须计算 3 个字符并过滤任何不是数字的内容。
在任何 3 位数字之后,脚本会输入:" - ";
然后防止添加超过9位。
一切正常,而我在输入中使用 "type=text"。
当我使用 "type=number"(这对我的新任务很重要)时,脚本不起作用,好吧 (replace(/(.{3})/g,' - ')
,将最后 3 个字符输入 [我猜])。
我的问题是:
从正则表达式的角度来看,这两种类型之间是否存在差异?
也许 "type=number" 将字符串解析为 int? (但据我所知,纯(无 JS)"type=number" 不会实时过滤任何内容)。
Ps。对不起,糟糕的语言。
现在代码:
$(document).ready(function() {
var selection = document.querySelector('.correct_phone input[name=phone]');
//selection.setAttribute('type','number');
selection.addEventListener('input', function(e) {
selection.addEventListener('keydown', function(b) {
if (b.keyCode != 8 && b.keyCode != 46 && b.keyCode != 37 && b.keyCode != 39 && b.keyCode != 16 && b.keyCode != 17 && b.keyCode != 18) {
if (e.target.value.length < 14 && e.target.value.length > 0) {
$(selection).parent('.correct_phone').find('.error_list.not_digit').remove();
//e.target.value = e.target.value.replace(/[^\dA-Z]/g, '').replace(/(.{3})/g, ' ').trim(); /^\d+$/
e.target.value = e.target.value.replace(/[^\d]/g, '').replace(/(.{3})/g, ' - ').trim();
} else if (e.target.value.length > 14) {
$(selection).parent('.correct_phone').find('.error_list.not_digit').remove();
e.target.value = e.target.value.substring(0, e.target.value.length - 1);
$(selection).parent('.correct_phone').css('border-color', 'red').find('label').before("<ul style='margin-bottom:0px;' class='error_list not_digit'><li style=' font-size:1.1em;'>Nuber shuld contains only 9 digits</li></ul>");
$(selection).parent('.correct_phone').find('ul.error_list.not_digit').animate({
opacity: 0
}, 3000, function() {
$(this).remove();
});
}
} else
$(selection).parent('.correct_phone').find('.error_list.not_digit').remove();
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="fieldset semi correct_phone">
<label class="input-name">Phone:</label>
<input type="text" name="phone" value="" />
</div>
根据 W3 input type="number" specification,type="number"
保留用于 浮点数。
以下行具体描述了您遇到的错误:
The value sanitization algorithm is as follows: If the value of the element is not a valid floating-point number, then set it to the empty string instead.
所以在您的代码中,您将输入值设置为不是浮点数的值:
e.target.value = e.target.value.replace(/[^\d]/g, '').replace(/(.{3})/g, ' - ').trim();
由于 -
字符被视为 错误输入,浏览器遵循规范并将值设置为空字符串。
要解决此问题,您应该使用 type="tel"
,它接受任何有效的电话号码作为输入:
<input type="tel" name="phone" value="" />
这会将现代移动浏览器设置为显示数字键盘布局(如 type="number"
。
脚本必须计算 3 个字符并过滤任何不是数字的内容。 在任何 3 位数字之后,脚本会输入:" - "; 然后防止添加超过9位。
一切正常,而我在输入中使用 "type=text"。
当我使用 "type=number"(这对我的新任务很重要)时,脚本不起作用,好吧 (replace(/(.{3})/g,' - ')
,将最后 3 个字符输入 [我猜])。
我的问题是:
从正则表达式的角度来看,这两种类型之间是否存在差异?
也许 "type=number" 将字符串解析为 int? (但据我所知,纯(无 JS)"type=number" 不会实时过滤任何内容)。
Ps。对不起,糟糕的语言。
现在代码:
$(document).ready(function() {
var selection = document.querySelector('.correct_phone input[name=phone]');
//selection.setAttribute('type','number');
selection.addEventListener('input', function(e) {
selection.addEventListener('keydown', function(b) {
if (b.keyCode != 8 && b.keyCode != 46 && b.keyCode != 37 && b.keyCode != 39 && b.keyCode != 16 && b.keyCode != 17 && b.keyCode != 18) {
if (e.target.value.length < 14 && e.target.value.length > 0) {
$(selection).parent('.correct_phone').find('.error_list.not_digit').remove();
//e.target.value = e.target.value.replace(/[^\dA-Z]/g, '').replace(/(.{3})/g, ' ').trim(); /^\d+$/
e.target.value = e.target.value.replace(/[^\d]/g, '').replace(/(.{3})/g, ' - ').trim();
} else if (e.target.value.length > 14) {
$(selection).parent('.correct_phone').find('.error_list.not_digit').remove();
e.target.value = e.target.value.substring(0, e.target.value.length - 1);
$(selection).parent('.correct_phone').css('border-color', 'red').find('label').before("<ul style='margin-bottom:0px;' class='error_list not_digit'><li style=' font-size:1.1em;'>Nuber shuld contains only 9 digits</li></ul>");
$(selection).parent('.correct_phone').find('ul.error_list.not_digit').animate({
opacity: 0
}, 3000, function() {
$(this).remove();
});
}
} else
$(selection).parent('.correct_phone').find('.error_list.not_digit').remove();
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="fieldset semi correct_phone">
<label class="input-name">Phone:</label>
<input type="text" name="phone" value="" />
</div>
根据 W3 input type="number" specification,type="number"
保留用于 浮点数。
以下行具体描述了您遇到的错误:
The value sanitization algorithm is as follows: If the value of the element is not a valid floating-point number, then set it to the empty string instead.
所以在您的代码中,您将输入值设置为不是浮点数的值:
e.target.value = e.target.value.replace(/[^\d]/g, '').replace(/(.{3})/g, ' - ').trim();
由于 -
字符被视为 错误输入,浏览器遵循规范并将值设置为空字符串。
要解决此问题,您应该使用 type="tel"
,它接受任何有效的电话号码作为输入:
<input type="tel" name="phone" value="" />
这会将现代移动浏览器设置为显示数字键盘布局(如 type="number"
。