kendoMaskedTextBox 格式的 IP 地址
kendoMaskedTextBox format IP address
我正在尝试屏蔽 IP 地址,并在用户输入地址后使其在输入中看起来正确。我需要它来保留点,所以我将它正确地处理到数据库中。
当前结果是这样的我替换了understored但是控件的更新格式不正确。任何帮助都会很棒。
控制台
1__.2.3._
1.2.3.
UI
123.___.___.___
代码
$(document).ready(function () {
$("#txtstartIpAddr").kendoMaskedTextBox({
mask: "000.000.000.000",
clearPromptChar: true,
change:startIpAddronKeyPress,
});
$("#txtendIpAddr").kendoMaskedTextBox({
mask: "000.000.000.000",
clearPromptChar: true,
change:endIpAddronKeyPress,
});
function startIpAddronKeyPress(){
const startcontrolIpAddr = $('#txtstartIpAddr').getKendoMaskedTextBox().value();
console.log(startcontrolIpAddr);
const result = startcontrolIpAddr.replace(/_/g, '');
$("#txtstartIpAddr").getKendoMaskedTextBox().value(result);
console.log(result);
}
function endIpAddronKeyPress(){
const endIpAddr = $('#txtendIpAddr').getKendoMaskedTextBox().value();
const result = endIpAddr.replace(/\s/g, '');
$("#txtendIpAddr").getKendoMaskedTextBox().value(result);
console.log(result);
}
});
就在 2021 年 7 月 22 日,Telerik(Kendo-UI 的所有者)拒绝实现使 MaskedTextBox 代表组(如 IP4 地址的部分)的功能.参见:https://feedback.telerik.com/kendo-jquery-ui/1359639-maskedtextbox-ip-address
一种替代方法是利用单独的库,例如这个答案:
另一种选择是加入四个 MaskedTextBox 输入,它们都具有 000
的掩码,以类似于 IP 地址输入的方式布置它们,然后当控件更改时,更新单个使用来自输入的原始值的值。然后当你需要使用该值时,使用RegEx来验证输入是否有效。这些方面的内容:
$(document).ready(function() {
let ip4 = '';
const maskedtextboxUpdate = function() {
const part1 = $('#maskedtextbox-ip1').data('kendoMaskedTextBox').raw();
const part2 = $('#maskedtextbox-ip2').data('kendoMaskedTextBox').raw();
const part3 = $('#maskedtextbox-ip3').data('kendoMaskedTextBox').raw();
const part4 = $('#maskedtextbox-ip4').data('kendoMaskedTextBox').raw();
ip4 = `${part1}.${part2}.${part3}.${part4}`;
};
$('#button-validate').on('click', function() {
const regexIP4 = /(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/g;
if (!regexIP4.test(ip4)) {
kendo.alert('Please enter a valid IP address.');
return;
}
kendo.alert('The IP address is valid.');
});
$('#maskedtextbox-ip1').kendoMaskedTextBox({
mask: '000',
change: maskedtextboxUpdate
});
$('#maskedtextbox-ip2').kendoMaskedTextBox({
mask: '000',
change: maskedtextboxUpdate
});
$('#maskedtextbox-ip3').kendoMaskedTextBox({
mask: '000',
change: maskedtextboxUpdate
});
$('#maskedtextbox-ip4').kendoMaskedTextBox({
mask: '000',
change: maskedtextboxUpdate
});
});
<link href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.default-v2.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2021.3.1207/js/kendo.all.min.js"></script>
<div>
<input id="maskedtextbox-ip1" />
.
<input id="maskedtextbox-ip2" />
.
<input id="maskedtextbox-ip3" />
.
<input id="maskedtextbox-ip4" />
</div>
<button class="k-button" id="button-validate">Validate</button>
这就是我在 jQuery 中所做的(后来我转向了 Angular 和 FormGroup 验证)。
var viewModel = kendo.observable({
ip_addr: "",
submit: function() {
var validator = $("#example").kendoValidator({
rules: {
checkIP: function(input) {
if (input.is("[name='Controller IP Address']") && input.val()) {
input.attr(
"data-checkIP-msg",
"IP Address format is incorrect"
);
return validate_ip_address(input.val());
}
return true;
}
}
}).data("kendoValidator");
if (!validator.validate()) {
console.warn("validation failed");
return;
} else {
console.log(this.ip_addr);
}
},
});
kendo.bind($("#example"), viewModel);
function numeric_with_period(e) {
var key;
var keychar;
if (window.event) key = window.event.keyCode;
else if (e) key = e.which;
else return true;
keychar = String.fromCharCode(key);
keychar = keychar.toLowerCase();
// control keys
if ((key === null) || (key === 0) || (key === 8) || (key === 9) || (key === 13) || (key === 27))
return true;
// alphas and numbers
else if ((("0123456789.").indexOf(keychar) > -1))
return true;
else
return false;
}
function validate_ip_address(ip_address) {
if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ip_address)) {
return (true)
} else return (false)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.common.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.rtl.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.default.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.mobile.all.min.css">
<script src="https://kendo.cdn.telerik.com/2021.3.1207/js/angular.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2021.3.1207/js/kendo.all.min.js"></script>
<div id="example">
<input name="Controller IP Address" data-role="maskedtextbox" data-bind="value: ip_addr" onkeypress="return numeric_with_period(event);" data-checkIP-msg="IP Address format is incorrect" maxlength="15" />
<br />
<span class="k-invalid-msg" data-for="Controller IP Address"></span>
<br />
<button data-role="button" class="k-button" data-bind="events: { click: submit }">Submit</button>
</div>
我正在尝试屏蔽 IP 地址,并在用户输入地址后使其在输入中看起来正确。我需要它来保留点,所以我将它正确地处理到数据库中。
当前结果是这样的我替换了understored但是控件的更新格式不正确。任何帮助都会很棒。
控制台
1__.2.3._ 1.2.3.
UI
123.___.___.___
代码
$(document).ready(function () {
$("#txtstartIpAddr").kendoMaskedTextBox({
mask: "000.000.000.000",
clearPromptChar: true,
change:startIpAddronKeyPress,
});
$("#txtendIpAddr").kendoMaskedTextBox({
mask: "000.000.000.000",
clearPromptChar: true,
change:endIpAddronKeyPress,
});
function startIpAddronKeyPress(){
const startcontrolIpAddr = $('#txtstartIpAddr').getKendoMaskedTextBox().value();
console.log(startcontrolIpAddr);
const result = startcontrolIpAddr.replace(/_/g, '');
$("#txtstartIpAddr").getKendoMaskedTextBox().value(result);
console.log(result);
}
function endIpAddronKeyPress(){
const endIpAddr = $('#txtendIpAddr').getKendoMaskedTextBox().value();
const result = endIpAddr.replace(/\s/g, '');
$("#txtendIpAddr").getKendoMaskedTextBox().value(result);
console.log(result);
}
});
就在 2021 年 7 月 22 日,Telerik(Kendo-UI 的所有者)拒绝实现使 MaskedTextBox 代表组(如 IP4 地址的部分)的功能.参见:https://feedback.telerik.com/kendo-jquery-ui/1359639-maskedtextbox-ip-address
一种替代方法是利用单独的库,例如这个答案:
另一种选择是加入四个 MaskedTextBox 输入,它们都具有 000
的掩码,以类似于 IP 地址输入的方式布置它们,然后当控件更改时,更新单个使用来自输入的原始值的值。然后当你需要使用该值时,使用RegEx来验证输入是否有效。这些方面的内容:
$(document).ready(function() {
let ip4 = '';
const maskedtextboxUpdate = function() {
const part1 = $('#maskedtextbox-ip1').data('kendoMaskedTextBox').raw();
const part2 = $('#maskedtextbox-ip2').data('kendoMaskedTextBox').raw();
const part3 = $('#maskedtextbox-ip3').data('kendoMaskedTextBox').raw();
const part4 = $('#maskedtextbox-ip4').data('kendoMaskedTextBox').raw();
ip4 = `${part1}.${part2}.${part3}.${part4}`;
};
$('#button-validate').on('click', function() {
const regexIP4 = /(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/g;
if (!regexIP4.test(ip4)) {
kendo.alert('Please enter a valid IP address.');
return;
}
kendo.alert('The IP address is valid.');
});
$('#maskedtextbox-ip1').kendoMaskedTextBox({
mask: '000',
change: maskedtextboxUpdate
});
$('#maskedtextbox-ip2').kendoMaskedTextBox({
mask: '000',
change: maskedtextboxUpdate
});
$('#maskedtextbox-ip3').kendoMaskedTextBox({
mask: '000',
change: maskedtextboxUpdate
});
$('#maskedtextbox-ip4').kendoMaskedTextBox({
mask: '000',
change: maskedtextboxUpdate
});
});
<link href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.default-v2.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2021.3.1207/js/kendo.all.min.js"></script>
<div>
<input id="maskedtextbox-ip1" />
.
<input id="maskedtextbox-ip2" />
.
<input id="maskedtextbox-ip3" />
.
<input id="maskedtextbox-ip4" />
</div>
<button class="k-button" id="button-validate">Validate</button>
这就是我在 jQuery 中所做的(后来我转向了 Angular 和 FormGroup 验证)。
var viewModel = kendo.observable({
ip_addr: "",
submit: function() {
var validator = $("#example").kendoValidator({
rules: {
checkIP: function(input) {
if (input.is("[name='Controller IP Address']") && input.val()) {
input.attr(
"data-checkIP-msg",
"IP Address format is incorrect"
);
return validate_ip_address(input.val());
}
return true;
}
}
}).data("kendoValidator");
if (!validator.validate()) {
console.warn("validation failed");
return;
} else {
console.log(this.ip_addr);
}
},
});
kendo.bind($("#example"), viewModel);
function numeric_with_period(e) {
var key;
var keychar;
if (window.event) key = window.event.keyCode;
else if (e) key = e.which;
else return true;
keychar = String.fromCharCode(key);
keychar = keychar.toLowerCase();
// control keys
if ((key === null) || (key === 0) || (key === 8) || (key === 9) || (key === 13) || (key === 27))
return true;
// alphas and numbers
else if ((("0123456789.").indexOf(keychar) > -1))
return true;
else
return false;
}
function validate_ip_address(ip_address) {
if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ip_address)) {
return (true)
} else return (false)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.common.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.rtl.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.default.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2021.3.1207/styles/kendo.mobile.all.min.css">
<script src="https://kendo.cdn.telerik.com/2021.3.1207/js/angular.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2021.3.1207/js/kendo.all.min.js"></script>
<div id="example">
<input name="Controller IP Address" data-role="maskedtextbox" data-bind="value: ip_addr" onkeypress="return numeric_with_period(event);" data-checkIP-msg="IP Address format is incorrect" maxlength="15" />
<br />
<span class="k-invalid-msg" data-for="Controller IP Address"></span>
<br />
<button data-role="button" class="k-button" data-bind="events: { click: submit }">Submit</button>
</div>