7

我有电话号码的 HTML 输入框。

我在输入时使用以下InputMask格式输入。8600000008 600 00 000

$(window).load(function()
{
   var phones = [{ "mask": "# ### ## ###"}, { "mask": "# ### ## ###"}];
    $('#phone').inputmask({ 
        mask: phones, 
        greedy: false, 
        definitions: { '#': { validator: "[0-9]", cardinality: 1}} });
});

我还使用 HTML 模式来检查数字是否以开头86并且总共有 9 位数字,但是InputMask它停止工作,并且无法以任何方式实现它:

<label for="phone" class="first-col">Mobile No.:</label>
<input type="text" id="phone" placeholder="8 600 00 000" required pattern="(86)\d{7}" />

如果有效,CSS 会添加绿色边框:

input:required:valid {
    box-shadow: 0 0 5px #5cd053;
    border-color: #28921f;
}

你有什么想法吗?

JS Fiddle

4

3 回答 3

8

好吧,您使用的掩码正在格式化输入值,因此如果您写一个数字,它将使用此掩码进行格式化,这意味着它将不再与您的模式匹配。

解决方案:

所以你只需要编辑你的模式正则表达式,使它匹配新的格式化值,所以(8 6)\d{2} \d{2} \d{3}用作模式:

<input type="text" id="phone" placeholder="8 600 00 000" required pattern="(8 6)\d{2} \d{2} \d{3}" />

演示:

这是一个工作片段:

input:required:valid {
	box-shadow: 0 0 5px #5cd053;
	border-color: #28921f;
}
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.1.62/jquery.inputmask.bundle.js"></script>
<script> 
$(window).load(function()
{
   var phones = [{ "mask": "# ### ## ###"}, { "mask": "# ### ## ###"}];
    $('#phone').inputmask({ 
        mask: phones, 
        greedy: false, 
        definitions: { '#': { validator: "[0-9]", cardinality: 1}} });
});
</script>
<label for="phone" class="first-col">Mobile No.:</label>
<input type="text" id="phone" placeholder="8 600 00 000" required pattern="(8 6)\d{2} \d{2} \d{3}" />

这是一个更新的工作小提琴

于 2017-05-08T08:34:49.333 回答
3

无需使用RegEx.

该插件提供了一种使用data-inputmask属性在元素本身上添加掩码的方法。在掩码的值9将匹配任何数字,而86只匹配那些数字。通过使用它,我们可以满足以下条件。

在 HTML 中添加:

<input id="phone" data-inputmask="'mask': '8 699 99 999'" />
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

掩码8 699 99 999将匹配以 开头的数字,86后跟任意七位数字。

在 JavaScript 中,添加:

$('#phone').inputmask();

就是这样!

$(document).ready(function() {
  $('#phone').inputmask();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/3.1.62/jquery.inputmask.bundle.js"></script>
<input id="phone" data-inputmask="'mask': '8 699 99 999'" />

于 2017-05-08T09:07:00.950 回答
0

你必须使用keyup事件和regex类似下面的
不需要使用库

document.getElementById("phone").addEventListener("keyup", function(){
    // restart the match
    this.value = this.value.replace(/\s/g, "");
    // Assess the amount needed
    var v = this.value.match(/(\d)(\d{1,3})?(\d{1,2})?(\d+)?/);
    if(v){
      // Save the desired value depending on its existence
      v =  (v[1]?v[1]+(v[2]?" "+v[2]+(v[3]?" "+v[3]+(v[4]?" "+v[4]:""):""):""):"");
      // and yea!
      this.value = v;
    }
});
<input  type="text" id="phone" placeholder="8 600 00 000" required onkeypress='return event.charCode >= 48 && event.charCode <= 57 && this.value.length < 12' pattern="\b86" title="description" value="8 6"/>

于 2017-05-05T14:58:54.133 回答