TG-PlatformPlus/qml/common/QxRegTextField.qml

82 lines
2.1 KiB
QML
Raw Normal View History

2026-03-02 14:29:58 +08:00
import QtQuick
import QtQuick.Controls
//import QtQuick.VirtualKeyboard 2.15
TextField {
id: control
placeholderText:qsTr("XX XX XX")
// font.pointSize: 13
font.family: "微软雅黑"
placeholderTextColor: "#A5A5A5"
color: "#1D2129"
focus: true
selectByMouse: true
// validator: RegExpValidator { // 使用正则表达式验证器
// regExp: /[0-9A-F]+/ // 只能输入0~9的整数和AF的大写字母
// }
background: Rectangle {
implicitWidth: 330
implicitHeight: 30
color: "#F2F3F5"
border.color: "#0068B4"
}
property bool isDelete: false
property bool isBack: false
property bool isPaste: false
// maximumLength: 29//200
Keys.onPressed: {
isBack = (event.key === Qt.Key_Backspace)
isDelete = (event.key === Qt.Key_Delete)
isPaste = (event.modifiers === Qt.ControlModifier && event.key === Qt.Key_V)
event.accepted = (event.text===" ") //过滤键盘输入空格
}
onTextChanged: {
if(isPaste){
control.text = checkFormat(control.text)
return
}
let temp = control.text
if(!isBack&&!isDelete){
var position = cursorPosition
if(length === 2)
{
temp += " "
}
else if(length > 3 && (length - 2) % 3 === 0){
temp += " "
}
else
{
position += 1
}
temp = checkFormat(temp)
control.text = temp
select(position,position)
}
isBack = false
isDelete = false
isPaste = false
}
function checkFormat(text){
text = text.replace(/[^0-9a-f]/gi, '');
let upertext = text.toUpperCase();
let newText = upertext.split(" ").join("")
var index = 0
while(index < newText.length){
if((index+1) %3 === 0){
newText = newText.slice(0, index) + " " + newText.slice(index)
index++
}
index++
}
return newText
}
}