M语言程序如何处理含空格字符串的末尾5位数字校验?
解决M语言字符串结尾5位数字验证问题
原代码的问题在于address?5.N是从字符串起始位置匹配5个数字,要求整个字符串必须是5位数字,自然无法处理包含其他字符(比如空格)的情况。要实现「检查字符串是否以5个数字结尾」的需求,可以通过提取字符串最后5位再验证的方式解决:
; 先判断字符串长度至少为5,再提取最后5位验证是否全为数字 i $L(address)>=5,$E(address,$L(address)-4,$L(address))?5.N s error="" w "Error:",error q 1 s error="invalid" q 0
代码说明:
$L(address):获取字符串address的长度,确保字符串至少有5个字符,避免提取子串时越界$E(address,$L(address)-4,$L(address)):提取字符串的最后5个字符(M语言字符串索引从1开始,长度为n的字符串,最后5位的起始索引是n-4)?5.N:验证提取出的5个字符是否全部为数字
如果需要忽略结尾数字前的空格(比如允许"ABCD 12345"这类字符串通过验证),可以先去除字符串末尾的非数字字符,再检查剩余部分的最后5位是否为数字,示例代码:
s temp=address ; 循环去除末尾非数字字符 f s temp=$E(temp,1,$L(temp)-1) q:$E(temp,$L(temp))?1.N w:$L(temp)=0 q ; 检查处理后的字符串长度至少5位,且最后5位全为数字 i $L(temp)>=5,$E(temp,$L(temp)-4,$L(temp))?5.N s error="" w "Error:",error q 1 s error="invalid" q 0
内容的提问来源于stack exchange,提问作者New27
相关产品推荐
相关产品推荐

