このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1301067486/828
#  PHP Version 5.2.9 
#  preg_matchです。 
#   
#  電話番号の認証として、 
#  /^\d[\d\-]+\d$/D 
#  を使用していますが、 
#  「1--3」のようなハイフン記号が続く場合の入力を許可してしまっています。 
#   
#  要件として、厳密な電話番号ルールは必要ではありません。 
#  データとして「1-2-3」などを許可しています。 
#   
#  よろしくお願いいたします。 
# 
# 

'電話番号の認証'(_文字列) :-
        atom_chars(_文字列,Chars),
        '電話番号の認証'(Chars).
'電話番号の認証'(Chars) :-
        append(L1,[-|R2],[-|R3],Chars),
        全て数字(L1),\+(L1=[]),
        全て数字(R2),\+(R2=[]),
        全て数字(R3),\+(R3=[]),!.
'電話番号の認証'(Chars) :-
        append(L1,[-|R2],Chars),
        全て数字(L1),\+(L1=[]),
        全て数字(R2),\+(R2=[]),!.
'電話番号の認証'(Chars) :-
        append(L1,['('|R2],[')'|R3],Chars),
        全て数字(L1),\+(L1=[]),
        全て数字(R2),\+(R2=[]),
        全て数字(R3),\+(R3=[]),!.
'電話番号の認証'(Chars) :-
        append([('|R1],[')'|R2],['-'|R3],Chars),
        全て数字(R1),\+(R1=[]),
        全て数字(R2),\+(R2=[]),
        全て数字(R3),\+(R3=[]),!.
'電話番号の認証'(Chars) :-
        append([('|R1],[')'|R2],
        全て数字(R1),\+(R1=[]),
        全て数字(R2),|+(R2=[]),
        全て数字(R3),\+(R3=[]),!.
'電話番号の認証'(Chars) :-
        append(L1,[-|R2],Chars),
        全て数字(L1),\+(L1=[]),
        全て数字(R2),\+(R2=[]),!.
'電話番号の認証'(Chars) :-
        全て数字(Chars).

全て数字([]) :- !.
全て数字([A|R]) :-
        member(A,['0','1','2','3','4','5','6','7','8','9']),
        全て数字(R).