You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PROGRESS 4GL中检测韩文字符?

如何修改PROGRESS 4GL代码检测韩文字符

首先说明:你提供的原代码实际逻辑是检测输入中是否包含英文字母(a-z/A-Z,排除空格),并将m_error设为yes。要实现韩文字符检测,需要基于韩文的Unicode码点范围来调整判断逻辑。

韩文的Unicode主要覆盖以下几个区间:

  • 韩文字母(Hangul Jamo):U+1100 至 U+11FF
  • 韩文兼容字母(Hangul Compatibility Jamo):U+3130 至 U+318F
  • 韩文字节(Hangul Syllables):U+AC00 至 U+D7AF
  • 韩文字母扩展A(Hangul Jamo Extended-A):U+A960 至 U+A97F
  • 韩文字母扩展B(Hangul Jamo Extended-B):U+D7B0 至 U+D7FF

修改后的代码如下:

PROCEDURE check_korean :
    DEFINE INPUT  PARAMETER m_char  AS CHARACTER NO-UNDO.
    DEFINE OUTPUT PARAMETER m_error AS LOGICAL   NO-UNDO.
    DEFINE VARIABLE i        AS INTEGER NO-UNDO.
    DEFINE VARIABLE cp       AS INTEGER NO-UNDO.

    m_error = NO.  // 初始化默认无韩文字符

    DO i = 1 TO LENGTH(m_char):  // 按Unicode字符遍历,而非字节
        cp = CODEPOINT(SUBSTRING(m_char, i, 1))  // 获取字符的Unicode码点
        
        // 判断是否在韩文的Unicode范围内
        IF (cp >= 0x1100 AND cp <= 0x11FF) OR
           (cp >= 0x3130 AND cp <= 0x318F) OR
           (cp >= 0xAC00 AND cp <= 0xD7AF) OR
           (cp >= 0xA960 AND cp <= 0xA97F) OR
           (cp >= 0xD7B0 AND cp <= 0xD7FF) THEN
        DO:
            m_error = YES.  // 检测到韩文字符,标记状态
            LEAVE.  // 找到目标字符后退出循环
        END.
    END.
END PROCEDURE.

代码调整说明

  1. 遍历逻辑优化:原代码按字节("raw"参数)处理字符,改为按Unicode字符遍历,避免多字节韩文被拆分导致的误判。
  2. 替换判断方式:用CODEPOINT函数获取字符的Unicode码点,替代原代码的ASC(仅获取单字节ASCII值),能准确识别韩文这类多字节字符。
  3. 韩文区间覆盖:包含所有常见韩文的Unicode范围,确保检测全面性。
  4. 状态初始化:默认m_error为NO,仅在检测到韩文时切换为YES,符合常规逻辑。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:02:36