Reg Ex 不会验证我是否将 # 与其他字符或数字一起使用


Reg Ex doesnt validate if i use # along with other characters or number

这是我之前问过的同一个问题。 抱歉,我检查了所有链接,前提是它没有帮助。 对不起,这是我第一次在这里问问题,所以不太清楚如何问

我在这里再次详细解释:

我有一个输入文本字段。我使用 jquery 来验证用户在此输入框中输入的输入日期。

我在javascript GET方法中将数据输入作为参数传递,并将其传递给PHP,并在那里使用简单的REG Ex进行验证。它确实在所有帐户中进行验证。但是,如果我在任何测试用例中添加#,则此验证将失败。 我的代码: 输入字段:

<div id="clntFstName" >
  <label for="clnt_fst_name">First Name</label>
  <input type="text" id="clnt_fst_name" name="clnt_fst_name" onBlur="checkFieldValid(this.value, this);" value=""/>
            <div class="msgError"></div>
          </div>

如果函数 CheckFieldValid 在用户离开字段输入框时调用。

Java脚本:

function checkFieldValid(value, obj) {
    var elem = obj.name;
    $('#' + elem).parent().children('.msgError').html('');
    var $label = $("label[for='" + obj.id + "']").text();
    var $id = obj.id;

    $.getJSON("ajax/registerClient.php?action=checkInputFieldValid&varField=" + value + "&lab=" + $label + "&id=" + $id, function(json) {
        if (json.status.length > 0) {
            $.each(json.status, function() {
                if (this['fail'] == 'fail') {
                    var info = '<div class="warningMsg"> ' + this['message'] + '</div>';
                    $('#' + elem).parent().children('.msgError').html(info);
                    $('#' + elem).focus();
                    $('#' + elem).val("");
                }
                if (this['success'] == 'success') {
                    $('#' + elem).parent().children('.msgError').html('this is success');
                }
            });
            if (json.status == 'empty') {
                $('#' + elem).parent().children('.msgError').html('this is empty');
            }
        }
    });

}

PHP代码:

if($_GET['action'] == 'checkInputFieldValid'){


    if(!empty($_GET['varField'])){
        // this creates dynamic session variables and add values to it.
        $_SESSION[$_GET['id']] = $_GET['varField'];

        if(preg_match('/^[a-zA-Z]+$/',$_GET['varField'])){
                        $txtVar = 'It is a valid '.$_GET['lab'];
                        array_push($validFieldArray, array('success' => 'success', 'message' => $txtVar));
                        echo json_encode(array('status' => $validFieldArray));
                        $errorJScript = 0;
                }else{
                        $txtVar = 'Enter a valid '.$_GET['lab'];
                        array_push($validFieldArray, array('fail' => 'fail', 'message' => $txtVar));
                        unset($_SESSION[$_GET['id']]);// unset the session variable to clear when page refresh
                        echo json_encode(array('status' => $validFieldArray));
                        $errorJScript = 1;
                }
    }

}

我不知道我错在哪里?我按照其他成员的指示做了所有事情 可能是我在传递 GET 请求变量时对 Java 脚本做错了什么?至于我想我完全按照其他成员告诉我的关于 PHP 部分的事情做了,但是当我从 Java 脚本部分获取数据时,数据可能是错误的?当我用 PHP 返回的其他值检查它时。但是当我在我的输入框中输入 # 时,它不会进行 AJAX 调用,也不会返回 JSON 或设置会话变量。所以可能当我将变量作为 GET 参数传递时,它不会运行 AJAX,只是不验证,所以请告诉我如何将 # 作为 GET 参数传递,以便我正确验证 PHP 中的字段。请帮忙,我会把我的工作丢掉:(

您的$.getJSON调用应使用encodeURIComponent()来确保您没有创建错误的URL:

$.getJSON("ajax/registerClient.php?action=checkInputFieldValid&varField=" +
    encodeURIComponent(value) + 
    "&lab=" + 
    encodeURIComponent($label) + 
    "&id=" + 
    encodeURIComponent($id), function(json) {

如果不这样做,则#字符将被解释为 URL 哈希字段开始的信号,而 URL 的其余部分将被忽略。