验证该字符串仅包含字母

问题描述 投票:3回答:1

我有一个输入字段,只应接受字母(大小写无关)。我可以简单地通过使用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.

有人能弄清楚吗?

regex sap abap matcher
1个回答
11
投票

首先,您的正则表达式无效。仅当您的输入仅包含一个字母时,它才会成功。

这将正常工作:

'[a-zA-Z]*'

+*表示重复。这意味着属于上一类的任意数量的字符链。区别在于*也可以表示0次,而+表示至少1次。因此,空字符串将匹配[a-z]*,但不匹配[a-z]+

然后,您正在检查对匹配器对象本身的引用是否等于abap_true。这将永远不会发生,因为它将始终是对匹配器对象的引用,而不是abap_true或abap_false。

要获得匹配结果,您不仅需要创建匹配器,还必须通过调用其match方法来运行它。

IF matcher->match( ) = abap_false.
    MESSAGE e000 with 'Only letters are allowed. No numbers or special characters'.      
ENDIF. 

但是还有一种更简单的方法来执行此操作,而不是使用cl_abap_matcher类:

FIND REGEX

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. 表示否定。因此,^表示不在给定范围内的任何字符。

© www.soinside.com 2019 - 2024. All rights reserved.