2016-06-28 4 views
1

されたときにエラーと警告を返すので、昨日、私は文字列から無効な文字を削除することが可能であったかどうかを確認するために質問をし、数フォーマッタのためにわずか数有効なものを維持する(Removing (nearly) all non-numeric characters from a string特定の文字が入力

答えは除外され、それは素晴らしい仕事をした。しかし、私はそれについて考えていて、単に無効な文字を削除することは正しいことではありません。入力された文字の残りの部分が実際に正しいと仮定することはできません。エラーを発生させるのがベストプラクティスです。

私は$ sAllowedValues変数に記載されていない任意の文字がすべてのヘルプ感謝入力

ある場合、私は、エラーを上げて行くだろうか思ったんだけど!

$sAllowedValues = "/\+?[0-9 EeXxTt]*/"; 
    preg_match_all($sAllowedValues, $sNumber, $sMatches); 
    var_dump($sMatches); 
+0

正確に何か問題がありますか?元の入力と一致したコンテンツを比較して、変更されたものがあるかどうかを確認できます。入力に不正な文字がある場合。 – jeroen

答えて

1

は単なる文字列の試合の最初と最後に追加許可されている文字を検証コードのスニペット:^$を。そうすれば、文字列全体が有効な文字で構成されている場合にのみ一致します。

$sNumber = 'a24432'; 

$sAllowedValues = "/^\+?[0-9 EeXxTt]*$/"; 
$res = preg_match($sAllowedValues, $sNumber, $sMatches); 
var_dump($res); // 1 - OK, 0 - there are invalid chars 
+0

これは素晴らしい作品です!私は正規表現がどのように動作するのか分かりません。決してそれらの周りに私の頭を得るために管理!ありがとうございました! –

+0

ちょっと単純な正規表現で[regex101](https://regex101.com/)をプレイし、結果がどのように変化するかを確認してください –

+0

もう少し小さなリクエストがあります。どうすれば ' + 'スルー、それは最初の位置にあった場合のみですか?人々は0で入力を開始できるので、これもまたオプションです。これはできますか、それとも複雑ですか? –

関連する問題