不确定我的regelur表达

时间:2017-03-18 23:54:12

标签: php regex preg-match

我总是被preg_match函数所困扰。

我希望输入与a-zA-Z0-9@#&-_.,匹配,而不是其他内容。 因此,如果输入中有!,则需要返回false。

到现在为止。

$string = "String-20";
return (preg_match("/[a-z][A-Z][0-9][@#&-_.,]/i", $string)) ? true : false;

这应该返回true

但请保持返回false

2 个答案:

答案 0 :(得分:2)

你想把这些作为一套,而不是像那样打破它们。您的模式将与" aA0 @"

之类的字符串匹配

你说"一个字符a-z,然后一个A-z,然后一个0-9,然后是这些特殊字符之一"但你真正想要的是"任何数量的这些特定字符"

^和$表示字符串的开头和结尾,所以我认为这应该做你想要的。

preg_match('/^[a-zA-Z0-9@#&\-_.,]*$/i', $string)

答案 1 :(得分:2)

你的正则表达式匹配字符串中的4个字符块 (因为preg_match可以找到部分匹配):2个字母,然后是数字和一些字符包括大写字母,因为&-_声明了以下范围:

enter image description here

使用

/^[a-z0-9@#&_.,-]+$/i

或甚至(因为\w此处将匹配[a-zA-Z0-9_]):

/^[\w@#&.,-]+$/

如果允许使用空字符串,请将+(一次或多次出现)替换为*(零次或多次出现)。

^锚点将确保引擎在字符串的开头开始匹配,$锚点将确保模式应与字符串结尾匹配。字符类末尾的连字符将被解析为文字-