正则表达式匹配标点符号和字母数字字符

时间:2012-08-08 10:02:40

标签: php regex preg-match

我正在尝试测试一个字符串,看它是否包含字母数字或标点符号以外的字符,如果是,则设置错误。我有下面的代码,但它似乎没有工作,因为它让“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;
}

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:8)

你可以做到

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())之前的否定

答案 1 :(得分:1)

/^[a-zA-Z0-9\s\p{P}]+$/

不要忘记用$

标记字符串的结尾

答案 2 :(得分: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_]

的简写