验证BusinessSkinForms控件中电话号码字符串的输入

问题描述

我正在尝试从文本框中获取用户输入的电话号码(我正在使用Business Skin Forms TbsSkinEdit)。文本框应仅允许数字,空格,破折号和圆括号。是否有任何可以解决此问题的业务外观表单控件?还是有其他方法可以实现这一目标? 数字可以采用以下格式,不需要格式验证,仅允许输入指定字符-

(223)2312-1323

23324-3423-2342

23123123

2234 2343

我尝试通过重写KeyPress事件来实现,但是我只能在文本框中允许数字字符,但是其他操作(如Paste和Ctrl + V)需要额外的处理。因此,请检查是否有任何可用的控件。

解决方法

您可能可以使用TbsSkinMaskEdit组件并设置其EditMask属性。它有一些示例掩码可供选择,示例掩码之一用于电话号码:

!\(999\)000-0000;1;_

...但是您可以自己编辑遮罩并将其设置为此,例如:

!\(999\)0000-0000;1;_


如果这样不能解决问题,则可以创建一个OnChange事件处理程序:

void __fastcall TForm1::bsSkinEdit1Change(TObject *Sender)
{
    TbsSkinEdit& se = *static_cast<TbsSkinEdit*>(Sender);
    decltype(se.Text) result;
    bool update = false;
    auto old_pos = se.SelStart - 1;

    for(auto ch : se.Text) {
        // numbers,spaces,dash and round brackets
        if((ch >= '0' && ch <= '9') || ch == ' ' || ch == '-' || ch == '(' || ch == ')') {
            result += ch;
        } else {
            update = true;
        }
    }
    if(update) {
        se.Text = result;
        se.SelStart = old_pos;
    }
}