ABAP【正则方式】校验【IP与端口】是否输入准确

这是一个用于检查输入的IP地址和端口是否有效的ABAP程序。程序通过拆分输入的字符串,然后分别验证IP地址和端口的格式,确保它们符合正确的格式且端口在有效范围内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*&---------------------------------------------------------------------*
*& Report  Y_ABC_IP_TEST
*&
*&---------------------------------------------------------------------*
*& 校验IP与端口是否输入准确
*&
*&---------------------------------------------------------------------*

REPORT Y_ABC_IP_TEST.



PARAMETERS: P_IPV TYPE CHAR50.

START-OF-SELECTION.
  DATA: LV_ANS.  " 空,X
  DATA: LV_MSG TYPE MSGTX.  " 空,X
  PERFORM FRM_CHECK_IPPORT USING P_IPV CHANGING LV_ANS LV_MSG.
  MESSAGE S001(00) WITH LV_MSG.

*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_IPPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_P_IP  text
*      <--P_LV_ANS  text
*----------------------------------------------------------------------*
FORM FRM_CHECK_IPPORT  USING    PV_P_IP
                       CHANGING CV_ANS CV_MSG.
  DATA: LT_STR  TYPE TABLE OF STRING WITH HEADER LINE.
  DATA: LV_LINE TYPE I.
  DATA: LV_PORT TYPE I.
 
  DATA: L_CX_ROOT     TYPE REF TO CX_ROOT.
  DATA: L_ERROR_MSG   TYPE STRING.

  REPLACE ALL OCCURRENCES OF ':' IN P_IPV WITH ':'.

  SPLIT PV_P_IP AT ':' INTO TABLE LT_STR.
  DESCRIBE TABLE LT_STR LINES LV_LINE.
  IF LV_LINE NE 2.  " IP 和 端口
    CV_ANS = 'E'.
    CV_MSG = 'IP与端口格式输入有误,请使用“:”连接IP与端口'.
    RETURN.
  ENDIF.

  READ TABLE LT_STR INDEX 1.
  PERFORM FRM_CHECK_1IP USING LT_STR CHANGING CV_ANS CV_MSG.
  CHECK CV_ANS = ''.

  READ TABLE LT_STR INDEX 2.
  PERFORM FRM_CHECK_2PORT USING LT_STR CHANGING CV_ANS CV_MSG.

ENDFORM.                    " FRM_CHECK_IPPORT
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_2PORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_CHECK_2PORT  USING     PV_PORT
                        CHANGING CV_ANS
                                 CV_MSG.
  CHECK PV_PORT IS NOT INITIAL.
  DATA: MATCHER2 TYPE REF TO CL_ABAP_MATCHER,
        MATCH2   TYPE C LENGTH 1.
  MATCHER2 = CL_ABAP_MATCHER=>CREATE( PATTERN    = '^[0-9]*[1-9][0-9]*$'
                                     TEXT        = PV_PORT ).
  MATCH2 = MATCHER2->MATCH( ).
  IF MATCH2 EQ ''.
    CV_ANS = 'E'.
    CV_MSG = '端口格式输入有误'.
    RETURN.
  ENDIF.

  IF PV_PORT NOT BETWEEN 1 AND 65535.
    CV_ANS = 'E'.
    CV_MSG = '端口不在有效范围内'.
    RETURN.
  ENDIF.

ENDFORM.                    " FRM_CHECK_2PORT
*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_1IP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PV_IP  text
*      <--CV_ANS  text
*      <--CV_MSG  text
*----------------------------------------------------------------------*
FORM FRM_CHECK_1IP  USING    PV_IP
                        CHANGING CV_ANS
                                 CV_MSG.
  DATA: MATCHER1 TYPE REF TO CL_ABAP_MATCHER,
        MATCH1   TYPE C LENGTH 1.
  MATCHER1 = CL_ABAP_MATCHER=>CREATE( PATTERN     = '((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)'
                                     TEXT        = PV_IP ).
  MATCH1 = MATCHER1->MATCH( ).
  IF MATCH1 EQ ''.
    CV_ANS = 'E'.
    CV_MSG = 'IP格式输入有误'.
    RETURN.
  ENDIF.
ENDFORM.                    " FRM_CHECK_1IP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值