ABAP正则表达式:字符串仅包含字母

时间:2012-09-14 08:41:01

标签: regex abap matcher

我有一个输入字段,它只能接受字母(无论是低位还是大写)。 我可以简单地使用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.

有人能解决这个问题吗?

1 个答案:

答案 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.