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 回答