我有一个输入字段,它只能接受字母(无论是低位还是大写)。 我可以简单地使用co ca(仅包含/任何)运算符来编写它。但这很耗时。
if p_input3 ca '*/ + - ? ! % ( ) = 0123456789'.
MESSAGE e000 WITH 'Only letters are allowed. No numbers or special characters'.
ENDIF.
有效。但我想用正则表达式来检查它。 我试过这段代码。但它效果不好。
DATA: text TYPE string,
matcher type REF TO cl_abap_matcher.
PARAMETERS: p_input3 TYPE string DEFAULT 'abCD*()fhi' LOWER CASE.
matcher = cl_abap_matcher=>create(
pattern = `([a-zA-Z])`
text = p_input3
).
if matcher = abap_true.
MESSAGE e000 with 'Only letters are allowed. No numbers or special characters'.
ENDIF.
有人能解决这个问题吗?
答案 0 :(得分:9)
首先,你的正则表达式不起作用。只有当您的输入只包含一个字母时才会成功。
这个会正常工作:
'[a-zA-Z]*'
然后检查对匹配器对象本身的引用是否等于abap_true。这不会发生,因为它始终是对匹配器对象的引用,而不是abap_true或abap_false。
要获得匹配的结果,您不仅要创建匹配器,还要通过调用匹配方法来实际运行它。
IF matcher->match( ) = abap_false.
MESSAGE e000 with 'Only letters are allowed. No numbers or special characters'.
ENDIF.
但是使用FIND REGEX
命令而不是类cl_abap_matcher,还有一种更简单的方法:
FIND FIRST OCCURRENCE OF REGEX '[^a-zA-Z]' IN p_input3.
IF sy-subrc = 0.
MESSAGE 'There is some non-letter in your input.' TYPE 'E'.
ENDIF.