我有以下正则表达式允许使用字母数字字符和以下特殊字符
/()-
正则表达式是
/[^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。
请告知解决方案
答案 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)