mrDarker
2025-09-05 6b80da0fe2a6053b39802a6701db6df0ab1fde24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#if !defined(AFX_REGEXEDIT_H__A4EABEC5_2E8C_11D1_B79F_00805F9ECE10__INCLUDED_)
#define AFX_REGEXEDIT_H__A4EABEC5_2E8C_11D1_B79F_00805F9ECE10__INCLUDED_
 
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
 
#include <afxwin.h>
#include <regex>
#include <functional>
#include <limits>
 
// Ã¶¾ÙÀàÐÍ£ºÕýÔò±í´ïʽÀàÐÍ
enum class RegexType
{
    Alphanumeric,   // ÔÊÐí×ÖĸºÍÊý×Ö
    Letters,        // Ö»ÔÊÐí×Öĸ
    Digits,         // Ö»ÔÊÐíÊý×Ö
    Decimal,        // ÔÊÐíСÊýºÍÕûÊý
    Custom          // ×Ô¶¨ÒåÕýÔò
};
 
class CRegexEdit : public CEdit
{
    DECLARE_DYNAMIC(CRegexEdit)
 
public:
    // ¹¹ÔìÓëÎö¹¹
    CRegexEdit();
    virtual ~CRegexEdit();
 
    // ÉèÖÃÕýÔòÀàÐÍ
    void SetRegexType(RegexType enType);
 
    // ÉèÖÃ×Ô¶¨ÒåÕýÔò±í´ïʽ
    void SetCustomRegex(const std::string& strCustomRegex);
 
    // ÉèÖÃÊýÖµ·¶Î§£¨ÕûÊý»ò¸¡µã£©
    void SetValueRange(long double dMinValue, long double dMaxValue);
 
    // ÉèÖÃ×Ô¶¨Òå±È½Ïº¯Êý
    void SetCustomComparator(std::function<bool(const std::string&)> comparator);
 
    // ÉèÖÃÊäÈë²»ºÏ·¨º¯Êý
    void SetInvalidInputCallback(std::function<void()> callback);
 
    // ²éÕÒÆ¥ÅäÄÚÈÝ
    bool FindMatch(const std::string& pattern, std::string& foundText);
 
    // Ì滻ƥÅäÄÚÈÝ
    void ReplaceMatch(const std::string& pattern, const std::string& replacement);
 
protected:
    // ¸ù¾Ýö¾ÙÖµ·µ»Ø¶ÔÓ¦µÄÕýÔò±í´ïʽ
    std::regex GetCurrentRegex() const;
 
    // Ð£ÑéÊäÈëÊÇ·ñÔÚÖ¸¶¨·¶Î§ÄÚ
    bool IsValueInRange(const std::string& strText);
 
protected:
    RegexType m_enRegexType;        // µ±Ç°Ñ¡ÖеÄÕýÔòÀàÐÍ
    std::string m_strCustomRegex;   // ×Ô¶¨ÒåÕýÔò±í´ïʽ
    long double m_dMinValue;        // ×îСֵ
    long double m_dMaxValue;        // ×î´óÖµ
 
    std::function<bool(const std::string&)> m_customComparator; // ×Ô¶¨Òå±È½Ïº¯Êý
    std::function<void()> m_invalidInputCallback;               // ²»ºÏ·¨ÊäÈëµÄ»Øµ÷º¯Êý
 
protected:
    void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
    DECLARE_MESSAGE_MAP()
};
 
#endif // !defined(AFX_REGEXEDIT_H__A4EABEC5_2E8C_11D1_B79F_00805F9ECE10__INCLUDED_)