避免在电话字段中使用 ´ 或 ` 字符
Avoid ´ or ` characters on telephonic field
我有这个输入
<input type="tel" class="form-control" id="inputTelephone" placeholder="123-456-7890 Format" pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}" maxlength="12">
并有此 jQuery 代码
$(function () {
$('#inputTelephone').keydown(function (e) {
var key = e.charCode || e.keyCode || 0;
$text = $(this);
if (key !== 8 && key !== 9) {
if($text.val().indexOf('´') === 1){
$text.val($text.val().replace(/[($)\s\._\-]+/g, ''));
}
if ($text.val().length === 3) {
$text.val($text.val() + '-');
}
if ($text.val().length === 7) {
$text.val($text.val() + '-');
}
}
return (key == 8 || key == 9 || key == 46 || (key >= 48 && key <= 57) || (key >= 96 && key <= 105));
})
});
到目前为止工作完美,但当我输入“´”或“`”时会显示
我在这个 link 上看到这里工作正常(没有显示重音字符)
https://webdesign.tutsplus.com/tutorials/auto-formatting-input-value--cms-26745
我最好把适用的代码放在 link
(function($, undefined) {
"use strict";
// When ready.
$(function() {
var $form = $( "#form" );
var $input = $form.find( "input" );
$input.on( "keyup", function( event ) {
// When user select text in the document, also abort.
var selection = window.getSelection().toString();
if ( selection !== '' ) {
return;
}
// When the arrow keys are pressed, abort.
if ( $.inArray( event.keyCode, [38,40,37,39] ) !== -1 ) {
return;
}
var $this = $( this );
// Get the value.
var input = $this.val();
var input = input.replace(/[\D\s\._\-]+/g, "");
input = input ? parseInt( input, 10 ) : 0;
$this.val( function() {
return ( input === 0 ) ? "" : input.toLocaleString( "en-US" );
} );
} );
/**
* ==================================
* When Form Submitted
* ==================================
*/
$form.on( "submit", function( event ) {
var $this = $( this );
var arr = $this.serializeArray();
for (var i = 0; i < arr.length; i++) {
arr[i].value = arr[i].value.replace(/[($)\s\._\-]+/g, ''); // Sanitize the values.
};
console.log( arr );
event.preventDefault();
});
});
})(jQuery);
但我在这里有点误会,有没有什么办法可以避免这种行为,所以该字段只允许数字?
通过在此行设置正确的 RegEx 解决
$text.val($text.val().replace(/[^0-9-]/g, ""));
我有这个输入
<input type="tel" class="form-control" id="inputTelephone" placeholder="123-456-7890 Format" pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}" maxlength="12">
并有此 jQuery 代码
$(function () {
$('#inputTelephone').keydown(function (e) {
var key = e.charCode || e.keyCode || 0;
$text = $(this);
if (key !== 8 && key !== 9) {
if($text.val().indexOf('´') === 1){
$text.val($text.val().replace(/[($)\s\._\-]+/g, ''));
}
if ($text.val().length === 3) {
$text.val($text.val() + '-');
}
if ($text.val().length === 7) {
$text.val($text.val() + '-');
}
}
return (key == 8 || key == 9 || key == 46 || (key >= 48 && key <= 57) || (key >= 96 && key <= 105));
})
});
到目前为止工作完美,但当我输入“´”或“`”时会显示
我在这个 link 上看到这里工作正常(没有显示重音字符)
https://webdesign.tutsplus.com/tutorials/auto-formatting-input-value--cms-26745
我最好把适用的代码放在 link
(function($, undefined) {
"use strict";
// When ready.
$(function() {
var $form = $( "#form" );
var $input = $form.find( "input" );
$input.on( "keyup", function( event ) {
// When user select text in the document, also abort.
var selection = window.getSelection().toString();
if ( selection !== '' ) {
return;
}
// When the arrow keys are pressed, abort.
if ( $.inArray( event.keyCode, [38,40,37,39] ) !== -1 ) {
return;
}
var $this = $( this );
// Get the value.
var input = $this.val();
var input = input.replace(/[\D\s\._\-]+/g, "");
input = input ? parseInt( input, 10 ) : 0;
$this.val( function() {
return ( input === 0 ) ? "" : input.toLocaleString( "en-US" );
} );
} );
/**
* ==================================
* When Form Submitted
* ==================================
*/
$form.on( "submit", function( event ) {
var $this = $( this );
var arr = $this.serializeArray();
for (var i = 0; i < arr.length; i++) {
arr[i].value = arr[i].value.replace(/[($)\s\._\-]+/g, ''); // Sanitize the values.
};
console.log( arr );
event.preventDefault();
});
});
})(jQuery);
但我在这里有点误会,有没有什么办法可以避免这种行为,所以该字段只允许数字?
通过在此行设置正确的 RegEx 解决
$text.val($text.val().replace(/[^0-9-]/g, ""));