如何让regex验证php addslashes()字符(特别是撇号)
我正在尝试使用preg_match()验证字符串(名称)。我传入一个名为$lname的字符串,该字符串包含一个已被斜杠的撇号。这方面的一个例子是“奥尼尔”。我已经为此尝试了多种正则表达式布局和解决方案,包括(\')、\'和just'。它不起作用,并给出一个有效的真实输出。谁能提供一个解决方案 这是我的密码:如何让regex验证php addslashes()字符(特别是撇号),php,regex,Php,Regex,我正在尝试使用preg_match()验证字符串(名称)。我传入一个名为$lname的字符串,该字符串包含一个已被斜杠的撇号。这方面的一个例子是“奥尼尔”。我已经为此尝试了多种正则表达式布局和解决方案,包括(\')、\'和just'。它不起作用,并给出一个有效的真实输出。谁能提供一个解决方案 这是我的密码: $lname = "O\'Neill"; if(preg_match("/^[a-zA-Z\'\s-]+$/",$lname)) echo "valid"; 您的第一个问题是无法避
$lname = "O\'Neill";
if(preg_match("/^[a-zA-Z\'\s-]+$/",$lname))
echo "valid";
您的第一个问题是无法避开反斜杠。您需要在正则表达式中编写一个文本反斜杠作为
\\
然而,如果你只是这样做,你会在任何地方寻找反斜杠或撇号,而不是顺序的\'
,因为你的[…]
匹配里面的任何字符
正确的方法是在括号外查找
^([a-zA-Z\s-]|\\')+$
注意:如果您这样做是为了保护SQL查询,那么这不是正确的方法。您应该使用准备好的语句。我看到两种解决方案:1)在regex模式中接受\项;2) 在测试正则表达式之前,请从字符串中删除\项。您必须使用双斜杠替换斜杠,因此您必须使用
[a-zA-Z\\\'\s-]+
如果您想只允许斜杠位于撇号之前,请使用^([a-zA-Z\s-]\\\?')+$
您只需要“/^[a-zA-Z\\\\\\\\\\\\'\s-]+$/”
。更好-“/^[a-zA-Z\\\\'\s-]+\Z/”
。较短的-“/^[A-Z\\\\'\s-]+\Z/i”
@WiktorStribiżew将与奥尼尔匹配,而不仅仅是奥尼尔