首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证字符串是否仅包含字母

验证字符串是否仅包含字母
EN

Stack Overflow用户
提问于 2012-09-14 16:41:01
回答 1查看 19K关注 0票数 3

我有一个输入字段,它应该只接受字母(大小写都没有关系)。我可以通过使用co ca (只包含/任意)运算符来编写此代码。但这很耗时。

代码语言:javascript
复制
  if p_input3 ca '*/ + - ? ! % ( ) = 0123456789'.
    MESSAGE e000 WITH 'Only letters are allowed. No numbers or special characters'.
  ENDIF.

它起作用了。但是我想使用正则表达式来检查它。我试过这个代码。但它并不能很好地工作。

代码语言:javascript
复制
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.

有没有人能弄明白?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-14 17:10:18

首先,您的正则表达式将不起作用。只有当您的输入仅包含单个字母时,它才会成功。

下面的代码将正常工作:

代码语言:javascript
复制
'[a-zA-Z]*'

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

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

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

代码语言:javascript
复制
IF matcher->match( ) = abap_false.
    MESSAGE e000 with 'Only letters are allowed. No numbers or special characters'.      
ENDIF. 

但是,还有一种比使用cl_abap_matcher类更简单的方法,使用FIND REGEX命令来完成此操作:

代码语言:javascript
复制
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]指的是不在给定范围内的任何字符。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12420898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档