如何为某个字符串创建正则表达式?您能在断言(代码的前提部分)中这样做吗?
我一直在谷歌搜索,但没有任何令人信服的东西。
问题是:
在DEPARTMENT (我们正在研究的类)创建过程中添加一个先决条件,以确保电话号码是有效的。有三种可能有效的电话号码格式。一个有效的电话号码由以下之一组成:
。
在验证电话号码时,任何嵌入的空格都将被忽略。
作为解决此问题的一部分,向系统中添加PHONE_NUMBER类是可以接受的,但不是必需的。
发布于 2011-03-27 23:26:37
有几个不同的问题需要回答:
RX_PCRE_MATCHER
。特性compile
允许设置所需的正则表达式,而功能recognizes
允许测试字符串是否匹配。"(|0[1-9]|\+[0-9]{2}[1-9])[1-9][0-8]{7}"
这样的事情应该做。在正则表达式本身中考虑中间空格是可能的,但是在传递给正则表达式匹配器之前,通过在输入字符串上应用prune_all (' ')
来消除它们要容易得多。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
。
发布于 2012-04-02 15:31:29
Halikal确实解决了这个问题,但直到现在还没有分享.
这在eiffelStudio 6.2中是可行的(注-这是gobo)
http://se.inf.ethz.ch/old/people/leitner/gobo_guidelines/naming_conventions.html
一个有效的电话号码由以下之一组成:
。
在验证电话号码时,任何嵌入的空格都将被忽略。
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
https://stackoverflow.com/questions/5442261
复制