PHP正则表达式允许特殊字符,但没有任何空格

时间:2014-07-25 06:50:17

标签: php regex preg-match pcre

我有以下正则表达式允许使用字母数字字符和以下特殊字符

/()-

正则表达式是

/[^A-Za-z0-9-()-/]/

完整的方法是

public function ValidateNumber($number)
{
    $return = true;
    $matches = null;
    if((preg_match('/[^A-Za-z0-9-/()-]/', $number, $matches)) > 0)
    {
       $return = false; 
    }
    return $return;
}

上面的方法很好,但如果数字有空格,也会返回TRUE。当我删除' /'来自正则表达式,如果数字有空格'然后它返回FALSE。

所以似乎有一些问题' /'在Regex。

请告知解决方案

4 个答案:

答案 0 :(得分:4)

使用此:

$theregex = '~^[a-z0-9/()-]+$~i';
if (preg_match($theregex, $yourstring)) {
    // Yes! It matches!
    } 
else { // nah, no luck...
     }

<强>解释

  • 最后的i标志使其不区分大小写
  • ^锚点断言我们位于字符串的开头
  • 要匹配[character class]中的连字符,请将其置于开头或结尾,以使其不含糊,因为它可能表示范围,如a-d
  • [a-z0-9/()-]+匹配一个或多个字母,数字,斜杠,括号或连字符
  • $锚点断言我们位于字符串的末尾

答案 1 :(得分:1)

正则表达式允许使用字母数字字符和上面提到的特殊字符/()-

^[A-Za-z0-9()\/-]+$
内部(在策略中)

^ chracter类意味着不是。所以你的正则表达式允许任何不属于字符类中提到的字符的字符。并且最好在字符类中转义/并始终考虑将-放在字符类的开头或结尾。要允许在char类中提到的一个或多个字符,则需要在字符类之后添加+

<强>解释

^                        the beginning of the string
[A-Za-z0-9()\/-]+        any character of: 'A' to 'Z', 'a' to 'z',
                         '0' to '9', '(', ')', '\/', '-' (1 or more
                         times)
$                        before an optional \n, and the end of the
                         string

答案 2 :(得分:0)

您应该使用/

在正则表达式中转义\/

但你应该使用以下表达式来做你想做的事情:

([^A-Za-z0-9-()-\/])+

所以整个方法看起来像这样:

public function ValidateNumber($number)
{
    if (preg_match('/([^A-Za-z0-9-()-\/])+/', $number)) {
       return false;
    }
    return true;
}

没有额外的变数。

在上述情况下,您尝试查找任何不匹配的字符(此处^表示不匹配的字符)您的条件以及是否找到其中任何字符preg_match返回1,这意味着该号码无效。

但是你也可以使用另一个表达式来实现你想要的 - 你找不到不匹配的字符(如前面的例子),但你用{{检查整个字符串是否符合你的标准1}}作为开头(在这种情况下,它表示字符串的开头 - 意思与先前解决方案中的不同)和^作为字符串的结尾来检查整个字符串。在这种情况下,您的方法可能如下所示:

$

答案 3 :(得分:-1)

为了更好地理解和学习正则表达式,您可以访问以下链接

Learning Regular Expressions

Useful regular expression tutorial

正则表达式教程

其中一个最好也很容易和我最喜欢的是

http://www.9lessons.info/2013/10/understanding-regular-expression.html?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+9lesson+%289lessons%29

非常好的初学者教程