在 RPGLE 中,我如何检查 10 大小变量的最后 3 个字符是否为数字
In RPGLE how can i check the last 3 character of a 10 size variable to be a numeric or not
我有一个大小为 10 的变量。它存储一个大小为 10 的值,如 'KUNAL12345'。如何检查值的最后 3 个字符是否为数字。在这种情况下,最后 3 个字符是 345,这是数值。
你可以这样使用%check(我没有测试)
dcl-c digits '0123456789';
dcl-s value char(10) inz('KUNAL12345');
if %check(%subst(value:8:3):digits) = 0;
// each of the three last characters is a digit character
endif;
或如@jtaylor 所说
if %checkr(value:digits) < 8;
// each of the three last characters is a digit character
endif;
您可以使用 sql regexp
函数。匹配字符串末尾 3 位数字的正则表达式是 \d\d\d$
d text s 80a varying
d match s 80a varying
d i5 s 5i 0
d numMatches s 10i 0
/free
text = 'steve 7335' ;
exec sql
set :numMatches = regexp_count( :text, '\d\d\d$', 1 ) ;
if numMatches > 0 ;
endif ;
text = 'steve 733z3' ;
exec sql
set :match :i5 = regexp_substr( :text, '\d\d\d$', 1, 1 ) ;
if i5 = -1 ;
// not a match
endif ;
我有一个大小为 10 的变量。它存储一个大小为 10 的值,如 'KUNAL12345'。如何检查值的最后 3 个字符是否为数字。在这种情况下,最后 3 个字符是 345,这是数值。
你可以这样使用%check(我没有测试)
dcl-c digits '0123456789';
dcl-s value char(10) inz('KUNAL12345');
if %check(%subst(value:8:3):digits) = 0;
// each of the three last characters is a digit character
endif;
或如@jtaylor 所说
if %checkr(value:digits) < 8;
// each of the three last characters is a digit character
endif;
您可以使用 sql regexp
函数。匹配字符串末尾 3 位数字的正则表达式是 \d\d\d$
d text s 80a varying
d match s 80a varying
d i5 s 5i 0
d numMatches s 10i 0
/free
text = 'steve 7335' ;
exec sql
set :numMatches = regexp_count( :text, '\d\d\d$', 1 ) ;
if numMatches > 0 ;
endif ;
text = 'steve 733z3' ;
exec sql
set :match :i5 = regexp_substr( :text, '\d\d\d$', 1, 1 ) ;
if i5 = -1 ;
// not a match
endif ;