我想阻止使用正则表达式键入无数字符但它不起作用
$(document).ready(function() {
$('#CodeField').val('');
var numberPattern = /[0-9]/;
$("#PhoneField").keydown(function (e) {
var inputValue = $(this).val();
var inputObject = $(this);
setTimeout(function () {
if(inputObject.val().indexOf('09')!== 0){
inputObject.val(inputValue);
}
})
if(inputObject.val().match(numberPattern) == false){
e.preventDefault();
return false;
}
})
});
<form id="msform">
<input type="text" id="PhoneField" value="09" class="phoneBox" maxlength="11"/>
<input type="button" value="دریافت کد" id="SendPhone"/>
答案 0 :(得分:1)
请注意,这可以通过HTML5的tel
输入实现,这在语义上是正确的。
当您添加pattern
属性并将正则表达式[0-9]{,11}
与required
属性结合使用时,浏览器会在您提交表单时发送表单之前进行快速检查。在这种情况下,浏览器将检查输入是否包含0到11位数字。您可能希望将其设置为更合理的范围,例如9到11位数:[0-9]{9,11}
。
<form id="msform">
<input type="tel" id="PhoneField" value="09" pattern="[0-9]{,11}" required class="phoneBox">
<input type="submit" value="دریافت کد" id="SendPhone">
</form>
&#13;
或者如果必须以09
开头:
<form id="msform">
<input type="tel" id="PhoneField" value="09" pattern="09[0-9]{7,9}" required class="phoneBox">
<input type="submit" value="دریافت کد" id="SendPhone">
</form>
&#13;
答案 1 :(得分:0)
使您的代码更简单,更轻松(您检查多项内容并应用正则表达式搜索):
$("#PhoneField").keydown(function (e) {
$(this).val($(this).val().replace(/\D/g,''));
}
只需用空字符串替换代码中的任何非数字。
我提供的代码不会在您的代码开头进行09检查,但是您的代码也不起作用。在您的代码中:
var inputValue = $(this).val();
设置&#34; inputValue&#34;只要keydown效果触发。这意味着如果有人没有他们的输入开始于&#34; 09&#34;它将替换为完全相同的值。
在您的RegEx的旁注上 - 它检查/ [0-9] /,这是单数数字。它永远不会匹配一个电话号码。 相反,人们可以用以下内容代替:
var numberPattern = /[0-9]+/;
答案 2 :(得分:0)
您可以使用正则表达式删除更改时的非数字字符。
"SELECT
month(date) AS month
, COUNT(id) AS sales
FROM orders
WHERE date BETWEEN ? AND ?
GROUP BY month(`date`)
ORDER BY month(`date`)"
表示不是数字,应该做得很好:
\D