2017-07-10 4 views
0

奇妙な文字をキャプチャしてフィルタリングする際に問題が発生し、正しく解析されないJSONデータが発生しています。 Regexr正規表現で奇妙な文字をキャプチャすることができません

$string = preg_replace('/[^\w\dñÑáéíóúÁÉÍÓÚüܺª\-_\/\s\\<>,;:.*\[\]\(\)+?¿!&%@=]/', '', $string); 

テスト正規表現:それは私がこの正規表現で作成したホワイトリストに含まれていないので、私は、理由を知りません。

This is how it is displayed in the browser

そして、これは、それがPluma(Linuxのエディタ)に表示されます方法です:あなたが見るように、この奇妙な文字が Testing regular expression on Regexr

をキャプチャされませんこれは、それがブラウザに表示されている方法です。

this is how it's displayed in Pluma (a Linux editor)

私はそれをコピーして、例えば、グーグルに挿入しようとすると、何も挿入されません。本当に奇妙です。私はこのような状況には一度も当たらなかった。

どのように対処するのですか?

+0

@MátéSolymosi私はホワイトリストを使用しています。それに従わない文字は、空の文字列に置き換えてください。 –

+0

問題の文字を質問テキストに追加できますか?私はスクリーンショットに基づいてそれを特定できませんでした。 –

+0

あなたは単純にコピーしてUTF8エディタでRegexに貼り付けてみましたか? – Bernhard

答えて

2

ページ破りの制御文字であるため、この神秘的なキャラクターはとても神秘的ではありませんが、あなたのエディタで表示することが困難である:フォーム\x0Cは、ASCIIテーブルを参照してください)フィードこの文字が中に含まれている

\s文字クラスです。そのため、パターンが一致しません。

解決策は、パターンから\sを削除し、許可された空白文字の完全なリストで置き換えることです。

すべての水平空白を含むクラス\h(サポートされている場合)を簡単に配置できます。次に、手作業で必要な垂直の空白を追加します。

Windows-1252コードページを使用している場合は、何も忘れずに文字範囲を使用してパターンを短縮するために、目の前に置いてください。

+1

ありがとう!あなたが私が自分の答えを書いて投稿している間にあなたが答えたように思えます。私はどこか他の場所を見つけました。とにかく。それは私の代わりに受け入れられたものとしてあなたの印を付けることは間違いありません。 –

1

私はそれを手に入れました!

は、この文字が表す判明form feedそれは\ sのホワイトスペース、\ tの、\ rまたは\ n個のように含まれている

具体的には、私が望むものを達成しました。新しい正規表現:

/[^\w\dñÑáéíóúÁÉÍÓÚüܺª\-_\/ \r\n\\<>,;:.*\[\]\(\)+?¿!&%@=]/ 
関連する問題