Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让regex验证php addslashes()字符(特别是撇号)_Php_Regex - Fatal编程技术网

如何让regex验证php addslashes()字符(特别是撇号)

如何让regex验证php addslashes()字符(特别是撇号),php,regex,Php,Regex,我正在尝试使用preg_match()验证字符串(名称)。我传入一个名为$lname的字符串,该字符串包含一个已被斜杠的撇号。这方面的一个例子是“奥尼尔”。我已经为此尝试了多种正则表达式布局和解决方案,包括(\')、\'和just'。它不起作用,并给出一个有效的真实输出。谁能提供一个解决方案 这是我的密码: $lname = "O\'Neill"; if(preg_match("/^[a-zA-Z\'\s-]+$/",$lname)) echo "valid"; 您的第一个问题是无法避

我正在尝试使用preg_match()验证字符串(名称)。我传入一个名为$lname的字符串,该字符串包含一个已被斜杠的撇号。这方面的一个例子是“奥尼尔”。我已经为此尝试了多种正则表达式布局和解决方案,包括(\')、\'和just'。它不起作用,并给出一个有效的真实输出。谁能提供一个解决方案

这是我的密码:

$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将与奥尼尔匹配,而不仅仅是奥尼尔