PHP正则表达式模式接受不允许的字符

时间:2015-04-23 07:44:33

标签: php regex

preg_match('~^[a-zA-Z0-9!@#$%^*()-_+=.]+$~', $string)

这是我在代码中使用的模式,我想要做的是告诉用户他们只允许使用这些字符。但问题是它适用于某些角色,而不适用于其他角色。例如,它不允许像“john& john”这样的字符串,但它允许“test<>”即使我没有输入'<'和'>'在模式中!

4 个答案:

答案 0 :(得分:2)

模式中的大多数字符对正则表达式引擎具有特殊含义,必须使用反斜杠进行转义:

^[a-zA-Z0-9\!\@\#\$\%\^\*\(\)\-\_\+\=\.]+$ 

https://regex101.com/r/kH7hD8/1

答案 1 :(得分:1)

我总是使用像https://regex101.com/

这样的工具来测试我的正则表达式

你必须在正则表达式中转义一些特殊字符:

^[a-zA-Z0-9!@#\$%\^\*\(\)\-_\+=\.]+$

答案 2 :(得分:0)

这将有效:

foreach(var o in MyEntities.Stuff
        .Include(x => x.RelationalTableA)
        .Include(x => x.RelationalTableB)
        .Include(x => x.RelationalTableC)
        .ToList())
{
    var x = new MyCustomClass();
    x.Property1 = o.RelationalTableA.PropertyX;
    x.Property2 = o.RelationalTableB.PropertyY;
    x.Property3 = o.RelationalTableC.PropertyZ;
    MyPocoList.Add(o);
}

答案 3 :(得分:0)

问题是在作为范围的字符类中间存在未转义的连字符。使用此正则表达式:

preg_match('~^[a-zA-Z0-9!@#$%^*()_+=.-]+$~', $string)