2011-06-27 10 views
0

私は正規表現を学んでいるので、電話番号の検証に関してこのトピックに関するいくつかの助けを使うことができます。preg_match電話番号の先行ゼロを否定する方法は?

私は、国コードが+記号で始まる1つの選択リストに分割された電話入力を持っています。ユーザーが電話番号の前のゼロを削除することを忘れた場合、E.164国際標準(ただし、この規則の例外である少数の国、イタリア、ノルウェーなど)には準拠しません。しかし、大多数は有効な国際電話番号のためにゼロを省略する必要があります。

私の限られた研究では、私は電話番号の形式が世界中で大きく異なることに気付きました。つまり、検証は厳密ではなくゆるやかで、ダッシュ、スペース、括弧、点、スラッシュの組み合わせを数字の間の区切り文字として使用する必要があります。 E.164標準に合うように、デリミタは空文字列に置き換えられ、次のような結果が得られます。+44755222333

これはこれまでのところどのような数の検証でも試みました。

preg_match('/^(?:[0-9][.\-\(\)\s]*)/$', $phonenumber); 

はどのようにすべての可能な電話番号の表記を検証するための柔軟性と相まって、文字列の文字0または00の存在下で、偽の一致を返しすなわち、先行ゼロを否定するための正規表現を、構成するのでしょうか?

敬具、なぜ

P.Sだけチェックします。 NANP番号にも 'ゼロでない'ルールが適用されますか?私はこれを頼んでいます。なぜなら、ここの人々の大多数がその電話番号システムに精通していると仮定しているからです。

+0

あなたは '044755222333'のような数が偽の一致を返さないようにしたいですかあなたが最初に0または00 –

+0

後にすべてのことをしたいですかゼロでないルールがNAND番号にも適用されます – jpiasetz

+0

知っておきたいことです。ありがとう! – why

答えて

2

あなたは先頭のゼロを取り除くためにpreg_replaceを使用することができます。

$phonenumber = preg_replace('/^0+/','',$phonenumber); 

これは文字列の先頭から1つ以上のゼロを削除します。 (1つのゼロだけを削除する場合は、プラス記号を削除します)。

希望に役立ちます。

+0

問題を別の方法で解決していただきありがとうございます。私は、入力文字列を検証するpreg_matchの前のゼロをどのように否定するのですか? – why

0

これはどう:

$number = '044567565'; 
preg_match('/^0{0,2}(([0-9]*[.\-\(\)\s]*)*)/', $number, $match); 
print_r($match); 

結果:

array(
    [0] => 044567565 
    [1] => 44567565 
    [2] => 
) 
関連する問題