2

文字列をテストして、英数字または句読点以外の文字が含まれているかどうかを確認し、含まれている場合はエラーを設定しようとしています。以下のコードがありますが、「CZW205é」を通過させているため、機能していないようです。私は正規表現に絶望的であり、問​​題を解決できないようです。

if(!preg_match("/^[a-zA-Z0-9\s\p{P}]/", $product_id)) {
    $errors[$i] = 'Please only enter alpha-numeric characters, dashes, underscores, colons, full-stops, apostrophes, brackets, commas and forward slashes';
    continue;
}

よろしくお願いします。

4

3 に答える 3

9

できるよ

if(preg_match("/[^a-zA-Z0-9\s\p{P}]/", $product_id)) {
    $errors[$i] = 'Please only enter alpha-numeric characters, dashes, underscores, colons, full-stops, apostrophes, brackets, commas and forward slashes';
    continue;
}

[^...]は否定された文字クラスであり、クラス内にないものが見つかるとすぐに一致します。

(そのため、前に否定を削除しましたpreg_match()

于 2012-08-08T10:18:14.787 に答える
1
/^[a-zA-Z0-9\s\p{P}]+$/

文字列の終わりをマークすることを忘れないでください$

于 2012-08-08T10:04:39.093 に答える
1

これは、最初の文字のみを照合しているために発生します。次のコードを試してください。

if(preg_match("/[^\w\s\p{P}]/", $product_id)) {
    $errors[$i] = 'Please only enter alpha-numeric characters, dashes, underscores, colons, full-stops, apostrophes, brackets, commas and forward slashes';
    continue;
}

注:\wはの省略形です[a-zA-Z0-9_]

于 2012-08-08T10:16:41.773 に答える