Preg_replace通过拆分另一个变量来创建两个不同的变量


preg_replace create two different variables by spliting another one

我使用POST XMLHttpRequest以便将数据发送到PHP脚本。这部分javascript代码是这样的:

function phppost(a, b){
    var hr = new XMLHttpRequest();
    hr.open("POST", "phppostexample.php", true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    hr.send("send="+a+""+b);
}

这部分PHP代码是这样的:

if(isset($_POST['send'])) {
    $code = preg_replace('#[^0-9]#', '', $_POST['send']);
    $name = preg_replace('#[^A-Za-z0-9]#', '', $_POST['send']);

问题是,我想要两个变量,我将给(ab),成为$code$name,但当我运行phppost(43365, "Hello World 43");的PHP脚本给我$code为4336943和$name为43369HelloWorld43。我怎样才能使PHP脚本给我$code作为43369和$name作为Hello World 43(与单词之间的差距)?提前感谢

真的只是在详细说明@charlietfl的评论:

function phppost(a, b){
    var hr = new XMLHttpRequest();
    hr.open("POST", "phppostexample.php", true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    hr.send("code="+a+"&name="+b);
}
然后

if(isset($_POST['code'])) {
    $code = $_POST['code'];
    $name = $_POST['name'];
}

最好将数据分成2个参数。

如果数据结构是一致的,你可以用一个正则表达式来完成这个。

$a = '43365Hello World 43';
preg_match('#^('d+)?([a-z].*)$#i', $a, $data);
$code = $data[1];
$name = $data[2];
echo $code . "'n";
echo $name . "'n";
PHP Demo: http://sandbox.onlinephpfunctions.com/code/1831fcef83a75ed94dcf54d9b88d1231714bf349

Regex101: https://regex101.com/r/fI6lO3/1

这是相当松散的,只是以一个数字开始,然后是一个字母。分组在第一个字母处分开。如果你的代码是字母数字除了数字以外的任何东西,这将不起作用