我有一个输入字段,它应该只接受字母(大小写都没有关系)。我可以通过使用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.有没有人能弄明白?
发布于 2012-09-14 17:10:18
首先,您的正则表达式将不起作用。只有当您的输入仅包含单个字母时,它才会成功。
下面的代码将正常工作:
'[a-zA-Z]*'+和*的意思是重复。这意味着属于前面类别的任意数量的字符链。不同的是,*也可以表示0次,而+表示至少一次。因此,空字符串将匹配[a-z]*,但不匹配[a-z]+
然后检查对matcher对象本身的引用是否等于abap_true。这永远不会发生,因为它始终是对matcher对象的引用,而不是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.^的意思是否定。所以[^a-zA-Z]指的是不在给定范围内的任何字符。
https://stackoverflow.com/questions/12420898
复制相似问题