kk-*_*v11 3 regex sap abap matcher
我有一个输入字段,只能接受字母(无论是低位还是大写).我可以简单地使用co ca(仅包含/任何)运算符来编写它.但这很费时间.
if p_input3 ca '*/ + - ? ! % ( ) = 0123456789'.
MESSAGE e000 WITH 'Only letters are allowed. No numbers or special characters'.
ENDIF.
Run Code Online (Sandbox Code Playgroud)
有用.但我想用正则表达式来检查它.我试过这段代码.但它不能很好地工作.
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.
Run Code Online (Sandbox Code Playgroud)
有人能想出来吗?
Phi*_*ipp 11
首先,你的正则表达式将不起作用.只有当您的输入只包含一个字母时才会成功.
这个将正常工作:
'[a-zA-Z]*'
Run Code Online (Sandbox Code Playgroud)
然后,您将检查对匹配器对象本身的引用是否等于abap_true.这不会发生,因为它始终是对匹配器对象的引用,而不是abap_true或abap_false.
要获得匹配的结果,您不仅要创建匹配器,还要通过调用匹配方法来实际运行它.
IF matcher->match( ) = abap_false.
MESSAGE e000 with 'Only letters are allowed. No numbers or special characters'.
ENDIF.
Run Code Online (Sandbox Code Playgroud)
但是使用+
命令而不是类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.
Run Code Online (Sandbox Code Playgroud)