2017-08-15 10 views
1
preg_match('/^[-A-Za-z0-9\p{Han}]+$/u', $name) 

これは漢字でのみ動作します。すべての言語をチェックする必要があります。 提案がありますか?多言語用PHP preg_match

私は以下のコマンドを試しました。それはいくつかの言語では機能しますが、すべての人にとってうまくいきません。

preg_match('/^[-A-Za-z0-9\p{L} ]+$/u', $name) 

EDIT

正確な要件は、次のようになります。文字列は任意のシンボルが含まれている場合、_と交換してください。マルチ言語コンテンツを許可します。

+0

あなたは '\ p {Letter}'を意味しますか? – raina77ow

+0

私はヒンディー語、中国語、日本語をテストしました。それは中国語と日本語では機能しましたが、ヒンディー語ではありませんでした。 – Cristal

+0

それは私にはうまく見えますが、発音区別のパターンは含まれていませんでした。 '\ p {M}'も追加してみてください。 \ '{\ p {L} \ p {M} \ s] + $/u''または - 一致する数字を避けるために ''/^ [ - \ p {L}} \ p {M} \ s] + $/u''です。 *厳密な要件を共有していただけますか? *文字*は何ですか?文字/数字/発音区別記号/スペース/ハイフン/アポストロフィ?正規表現の質問をするとき** **より具体的に**ください。 –

答えて

0

正確な要件は次のとおりです。文字列にシンボルが含まれている場合は、_に置き換えます。マルチ言語コンテンツを許可します。

だから、あなたが定義した置換文字列のパターンのすべての非重複発生を置き換え、シンボルにマッチするパターンが\p{S}あるpreg_replaceを使用する必要があります。 u UNICODE修飾子を忘れないでください。

preg_replace('~\p{S}~u', '_', $s); 

、あなたも、あなたが

preg_replace('~(?!-)[[:punct:]]~u', '_', $s); 

を使用することができ、-を除いて(POSIX文字クラス[:punct:]は句読点と記号の両方が含まれます)句読点文字にマッチし、削除することを計画している場合は、regex demoを参照してください。

ここで、(?!-)否定ルックアヘッドでは、[[:punct:]]の句読点と記号にマッチするパターンを使用して正規表現エンジンに-をマッチさせないように制限します。

必要に応じて、このように例外を追加することができます。