0

StackOverflowの誰かが私にこのコードをくれました:

$output = preg_replace( '/(\+?\d{2}|0)(\d{7,8})/', '0$2', $test);

ユーザー入力を変更します。

+622112345を02112345に

622112345を02112345に

02112345から02112345

残念ながら、7〜8桁でしか機能しません。コードを次のように変更することにしました。

$output = preg_replace( '/(\+?\d{2}|0)(\d{15})/', '0$2', $test);

に変更(\d{7,8})する(\d{15})ことで、この正規表現で最大15桁を検証できるようになることを望んでいました。しかし、これが私が持っているものです:

input : 083812345678910 >> output : 083812345678910 [correct]

input : 6283812345678910 >> output : 6283812345678910 [false, should be : 083812345678910]

input : +6283812345678910 >> output : 6283812345678910 [false, should be : 083812345678910]

これを15桁の数字で機能させるにはどうすればよいですか?ありがとう。

更新:ユーザー入力は10、11、12、さらには13桁にすることができます。ただし、15桁以下です。したがって、プレフィックスを変更するには、このコードが必要です:+ 62、62、または0INTO0xxxx。桁数に関係なく、最大15桁です。

4

1 に答える 1

2

正しい正規表現は次のとおりです。

$output = preg_replace( '/(0|\+?\d{2})(\d{7,14})/', '0$2', $test);

16桁の数字がありますが、2桁の内線番号を考慮して、内線番号の後には最大14桁しかありません。これは、以外の拡張機能でも機能することに注意してください。62これが望ましくない場合は、に置き換え\d{2}62ください。

デモ

于 2012-08-08T16:43:58.600 に答える