2

preg_replaceing で文字列をフィルタリングしようとしています。数字とドット以外、およびドットの前に 5 個までの数字。wamp(UptoDate)の下のPHP 5.4.3。

グッドマッチ:

  • 0.01
  • 0.1
  • 12345.11
  • 12345.1
  • 1
  • 12345

悪い一致:

  • 0,10
  • 0,1
  • 12345,11
  • 12345,1
  • 123456

私が抱えている最初の問題は、(,) カンマを削除できないことです。(.) ドットをセパレーターとして保持したいだけです。これは価格文字列用であることに注意してください。Phpは(,)カンマで計算しないみたいなので、入力はカンマのみにしたいです。コンマではありません。だから私は(^)を使用し、文字クラスを否定し、次に0-9. . 次に、一致する文字数を追加します。私は 1 から 5 の間でした (1 または 2 または 3 または... 5

私は何を間違っていますか。

ここに私が助けに使ってきた情報があります: http://www.regular-expressions.info/reference.html http://www.expreg.com/options.php

<?php $string = 'asd321asd321df564d.fasd321asd12';

$string = cleanabc123($string);

function cleanabc123($data) {   $data =
preg_replace("/([^0-9\s\.]){1,5}/u", "", $data);    return $data; }

// This will be 'username' now echo $string; ?>
4

2 に答える 2

1

意図を逆にする方が理にかなっています: preg_match() を使用して、良い結果だけを見つけてください。それ以外の場合は、FALSE または NULL を返します。

このようにして、正規表現は書きやすく、理解しやすくなります。

ところで、あなたが今やっている方法では、 を使用してpreg_replace("/[^\d\.]/u", "", $str)、位置に関係なくすべての間違った文字を置き換えたほうがよいでしょう。

于 2013-01-22T21:44:55.593 に答える
0

私は交換します

preg_replace("/([^0-9\s\.]){1,5}/u", "", $data);

$match = preg_match("/^[0-9]+([,.][0-9]{1,5})?$/u", $data);

preg_matchこの場合はを使用することをお勧めし$matchます。

于 2013-01-22T21:46:44.230 に答える