gpt4 book ai didi

php - JavaScript 中的 RegExp 在 PHP 中抛出错误

转载 作者:行者123 更新时间:2023-11-30 17:56:05 25 4
gpt4 key购买 nike

编辑:我现在觉得自己有点像个白痴,因为我实际上在问题中包含了错误的表达方式。正确的表达式是/^([\u00c0-\u01ffa-zA-Z'\.\-])+$/,虽然还是报同样的错误(除了偏移量是5,不是44).

我使用以下正则表达式来使用 JavaScript 验证名称:

<罢工>
/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900 -\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~ ]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([ a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF ])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z] |[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i

(这是从 Stack Overflow 的回答中摘录的,尽管我正在努力寻找原始问题来提供链接,但恐怕)。

我在将名称发送到服务器之前使用它来验证名称,但显然它们需要在服务器上重新验证,因为有其他方法可以将数据发送到服务器(数据最终输入到 MySQL 数据库中)。

它在 JavaScript 中运行得非常好,允许我输入各种名称,例如 John SmithHenry O'ConnerJérémie Dent-O'Brien 。但是,在将 RegExp 复制到 PHP 中(使用以下代码)时,它会抛出如下所示的错误。

$nameRegEx = "[that expression from above]";
$r = $_POST["r"];
if(preg_match($nameRegEx,$r)){
// do MySQL stuff
}else{
trigger_error("Invalid name",E_USER_ERROR); // Obviously I won't use this in
// the final script as it is
// very un-user-friendly
// (is that a word?)
}

Warning: preg_match() [function.preg-match]: Compilation failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 44 (see edit) 5 in /path/to/file.php on line 21

Fatal error: Invalid name in /path/to/file.php on line 48

坦率地说,我对 RegEx 知之甚少,也不知道这里出了什么问题。一些研究表明,JS 和 PHP 都将它们的 RegEx 基于 Perl 语法,因此它们并没有太大的不同,尽管存在一些差异,这就是它被破坏的原因。如何将其转换为在 PHP 中工作?那里有某种自动转换器吗?

其他人也遇到过类似的问题,但由于他们的问题是特定于他们的正则表达式的,所以我看不出如何在我的 RegEx 中使用该信息。

有人可以指出正确的方向来转换它吗?

最佳答案

您的正则表达式的问题是 \u1234 与 javascript 中的 unicode 字符 1234 匹配,但此语法在 PCRE 中无效。 PCRE 中的正确语法是 \X{1234}。当您匹配一系列 unicode 字符时,请按如下方式更改您的正则表达式:

/^[ \X{00c0-01ff}a-zA-Z'\.\-]+$/

请注意,我使用 \X{00c0-01ff} 来匹配该范围内的任何 unicode 字符。我还删除了捕获组,因为为匹配字符串中的每个字符设置 1 个捕获组有点毫无意义。

This documentation如果您在将 javascript 正则表达式转换为 PCRE 正则表达式时遇到其他问题,这可能会有所帮助。

关于php - JavaScript 中的 RegExp 在 PHP 中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18042578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com