ハリカルは実際にこれを解決しましたが、今まで共有していませんでした...
これは eiffelStudio 6.2 で動作します (注 - これは gobo です)。
http://se.inf.ethz.ch/old/people/leitner/gobo_guidelines/naming_conventions.html
有効な電話番号は、次のいずれかで構成されます。
- 最初の数字がゼロ以外の 8 桁
- 先頭のゼロ、ゼロ以外の 1 桁の市外局番、および 8 桁の数字 (最初の数字はゼロ以外)
- 先頭の + に続いて 2 桁の国コード、次に 0 以外の 1 桁の市外局番、次に 8 桁 (最初の数字は 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