首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >埃菲尔正则表达式验证

埃菲尔正则表达式验证
EN

Stack Overflow用户
提问于 2011-03-26 12:16:33
回答 2查看 707关注 0票数 1

如何为某个字符串创建正则表达式?您能在断言(代码的前提部分)中这样做吗?

我一直在谷歌搜索,但没有任何令人信服的东西。

问题是:

在DEPARTMENT (我们正在研究的类)创建过程中添加一个先决条件,以确保电话号码是有效的。有三种可能有效的电话号码格式。一个有效的电话号码由以下之一组成:

  • 8位数字,其中第一位是非零
  • (一个前导零),一个是单个非零位区号,然后是八位数字,第一个是非零的
  • a‘+’,然后是一个两位的国家代码,然后是一个单数的非零数字的区号,然后是八位数,其中第一个是非零的

在验证电话号码时,任何嵌入的空格都将被忽略。

作为解决此问题的一部分,向系统中添加PHONE_NUMBER类是可以接受的,但不是必需的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-28 07:26:37

有几个不同的问题需要回答:

  1. 如何检查给定字符串是否匹配埃菲尔中指定的正则表达式?可以使用Gobo库中的类RX_PCRE_MATCHER。特性compile允许设置所需的正则表达式,而功能recognizes允许测试字符串是否匹配。
  2. 如何为给定的电话号码规范编写正则表达式?虽然我还没有检查过,但是像"(|0[1-9]|\+[0-9]{2}[1-9])[1-9][0-8]{7}"这样的事情应该做。在正则表达式本身中考虑中间空格是可能的,但是在传递给正则表达式匹配器之前,通过在输入字符串上应用prune_all (' ')来消除它们要容易得多。
  3. 如何在创建过程中添加一个先决条件来验证该参数是否满足它?让我们假设,从前面的项中,我们构造了一个函数is_phone_number,它接受一个STRING,并返回一个BOOLEAN,该BOOLEAN指示指定的字符串是否代表一个有效的电话号码。一个简单的解决方案是编写

制造(电话:字符串)要求is_phone_number (电话)。

并在类is_phone_number本身中有一个特性DEPARTMENT。但这使我们无法在调用此创建过程之前检查指定的字符串是否表示电话号码。因此,将is_phone_number移动到类DEPARTMENT将继承的类PHONE_NUMBER_VALIDATOR是有意义的。类似地,如果is_phone_number.需要根据指定的规则验证字符串,则可以继承PHONE_NUMBER_VALIDATOR并重用特性PHONE_NUMBER_VALIDATOR

票数 2
EN

Stack Overflow用户

发布于 2012-04-02 23:31:29

Halikal确实解决了这个问题,但直到现在还没有分享.

这在eiffelStudio 6.2中是可行的(注-这是gobo)

http://se.inf.ethz.ch/old/people/leitner/gobo_guidelines/naming_conventions.html

一个有效的电话号码由以下之一组成:

  • 8位,其中第一位是非零
  • (一个前导零),一个是单个非零数字的区号,然后是八位,第一个是非零的
  • ,一个是前导+,然后是一个两位的国家代码,然后是一个单一的非零数字的区域代码,然后是八位,其中第一个是非零的

在验证电话号码时,任何嵌入的空格都将被忽略。

代码语言:javascript
代码运行次数:0
运行
复制
require                  -- 040 is ascii hex space
valid_phone: 
  match(phone, "^\040*[1-9]\040*([0-9]\040*){7}$") = TRUE or
  match(phone, "^\040*0\040*([1-9]\040*){2}([0-9]\040*){7}$") = TRUE or
  match(phone, "^\040*\+\040*([0-9]\040*){2}([1-9]\040*){2}([0-9]\040*){7}$") = TRUE


feature --Regular Expression check
  match(text: STRING; pattern: STRING): BOOLEAN is
        -- checks whether 'text' matches a regular expression 'pattern'
    require
      text /= Void
      pattern /= Void
    local
      dfa: LX_DFA_REGULAR_EXPRESSION         --There's the Trick!
      do
        create dfa.make
        dfa.compile(pattern, True)           --There's the Trick!
        check      -- regex must be compiled before we can use it
          dfa.is_compiled;
        end
        Result := dfa.matches(text)
     -- debug: make sure of which pattern
        if dfa.matches (text) then
          io.putstring(text + " matches " + pattern + "%N")
        end
      end
  end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5442261

复制
相关文章

相似问题

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