From ef97fe09f71280d7d3b90c7745e1379616a612ff Mon Sep 17 00:00:00 2001 From: zhaofangxun Date: Tue, 19 May 2026 15:00:33 +0800 Subject: [PATCH] fix: use loose regex for IP and mask input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Add loose edit-time regex (ipEditRegExp, maskEditRegExp) that only allows digits and dots 2. Replace strict validators with loose ones on IP address, subnet mask, and gateway input fields 3. Allow users to type incomplete IP/mask values during editing without being blocked by validation Log: Use permissive input regex for IPv4 address and subnet mask fields fix: 使用宽松正则校验IP和子网掩码输入 1. 新增编辑时宽松正则(ipEditRegExp, maskEditRegExp),仅允许数字和点 2. 将IP地址、子网掩码和网关输入框的校验器替换为宽松正则 3. 允许用户在编辑过程中输入不完整的IP/掩码值,不被严格校验阻断 Log: IPv4地址和子网掩码输入框使用宽松正则校验 PMS: BUG-361211 --- dcc-network/qml/NetUtils.js | 6 +++++- dcc-network/qml/SectionIPv4.qml | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/dcc-network/qml/NetUtils.js b/dcc-network/qml/NetUtils.js index 9d74c2ec..7c732c9d 100644 --- a/dcc-network/qml/NetUtils.js +++ b/dcc-network/qml/NetUtils.js @@ -1,5 +1,5 @@ .pragma library -// SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later const VpnTypeEnum = Object.freeze({ "l2tp": 0x01, @@ -12,9 +12,13 @@ const VpnTypeEnum = Object.freeze({ }) // ip正则表达式 const ipRegExp = /^((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]?))$/ +// ip编辑时宽松正则(仅允许数字和点) +const ipEditRegExp = /^[0-9.]*$/ const ipv6RegExp = /^(((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))))$/ // 子网掩码 const maskRegExp = /(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)/ +// 子网掩码编辑时宽松正则(仅允许数字和点) +const maskEditRegExp = /^[0-9.]*$/ // MAC正则表达式 const macRegExp = /([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})/ diff --git a/dcc-network/qml/SectionIPv4.qml b/dcc-network/qml/SectionIPv4.qml index ec390032..2d787ed2 100644 --- a/dcc-network/qml/SectionIPv4.qml +++ b/dcc-network/qml/SectionIPv4.qml @@ -340,7 +340,7 @@ DccObject { page: D.LineEdit { text: addressData.length > index ? addressData[index][0] : "0.0.0.0" validator: RegularExpressionValidator { - regularExpression: NetUtils.ipRegExp + regularExpression: NetUtils.ipEditRegExp } onTextChanged: { if (showAlert) { @@ -372,7 +372,7 @@ DccObject { page: D.LineEdit { text: addressData.length > index ? addressData[index][1] : "255.255.255.0" validator: RegularExpressionValidator { - regularExpression: NetUtils.maskRegExp + regularExpression: NetUtils.maskEditRegExp } onTextChanged: { if (showAlert) { @@ -404,7 +404,7 @@ DccObject { enabled: index === 0 text: index === 0 && addressData.length > index ? addressData[index][2] : "" validator: RegularExpressionValidator { - regularExpression: NetUtils.ipRegExp + regularExpression: NetUtils.ipEditRegExp } onTextChanged: { if (showAlert) {