سؤال

لدي وظيفة تقوم بتشغيل Regex الذي أنشأه المستخدم.ومع ذلك، إذا أدخل المستخدم تعبيرًا عاديًا لن يتم تشغيله، فسيتوقف ويسقط.لقد حاولت لف السطر في كتلة Try/Catch ولكن للأسف لم يحدث شيء.

إذا كان ذلك مفيدًا، فأنا أقوم بتشغيل jQuery ولكن الكود أدناه لا يحتوي عليه لأنني أعتقد أنه أكثر أهمية من ذلك بقليل.

يحرر:نعم، أعلم أنني لا أهرب من "["، هذا مقصود ومغزى السؤال.أنا أقبل مدخلات المستخدم وأريد أن أجد طريقة لحل هذا النوع من المشكلات دون أن ينهار التطبيق على وجهه.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <title>Regex</title>

    <script type="text/javascript" charset="utf-8">
        var grep = new RegExp('gr[');

        try
        {
            var results = grep.exec('bob went to town');
        }
        catch (e)
        {
            //Do nothing?
        }

        alert('If you can see this then the script kept going');
    </script>
</head>
<body>

</body>
</html>
هل كانت مفيدة؟

المحلول

جرب هذا، حيث يقوم RegExp الجديد بطرح الاستثناء

التعبير العادي

    <script type="text/javascript" charset="utf-8">
            var grep;

            try {
                    grep = new RegExp("gr[");
            }
            catch(e) {
                    alert(e);

            }
            try
            {
                    var results = grep.exec('bob went to town');
            }
            catch (e)
            {
                    //Do nothing?
            }

            alert('If you can see this then the script kept going');
    </script>

نصائح أخرى

المشكلة تكمن في هذا السطر:

var grep = new RegExp('gr[');

"[" هو حرف خاص لذا يجب الهروب منه.كما أن هذا السطر لم يتم تضمينه في محاولة...التقاط، لذلك لا يزال بإمكانك الحصول على الخطأ.

يحرر:يمكنك أيضًا إضافة

alert(e.message);

في جملة الصيد لرؤية رسالة الخطأ.إنه مفيد لجميع أنواع الأخطاء في جافا سكريبت.

تحرير 2:حسنًا، كنت بحاجة إلى قراءة السؤال بعناية أكبر، لكن الإجابة لا تزال موجودة.في رمز المثال، لم يتم تغليف السطر المخالف في كتلة حاول...التقاط.لقد وضعته هناك ولم تظهر لي أخطاء في Opera 9.5 وFF3 وIE7.

var grep, results;

try {
    grep = new RegExp("gr[");
    results = grep.exec('bob went to town');
}
catch(e) {
    alert(e);
}
alert('If you can see this then the script kept going');

سيعمل وضع تهيئة RegExp داخل محاولة/التقاط (تم اختباره للتو في FireFox)


var grep, results;

try
{
    grep = new RegExp("gr["); // your user input here
}
catch(e)
{
    alert("The RegExpr is invalid");
}

// do your stuff with grep and results

الهروب هنا ليس هو الحل.نظرًا لأن الغرض من هذا المقتطف هو اختبار RegExpr الذي أنشأه المستخدم فعليًا، فستحتاج إلى التقاط [ كحاوية RegExpr غير مغلقة.

RegExp الخاص بك لا يغلق [

في FireFox الخاص بي، لا يعود أبدًا من المُنشئ - يبدو وكأنه خطأ في تنفيذ RegExp، ولكن إذا قدمت تعبيرًا صالحًا، فإنه يعمل

أحد الخيارات هو التحقق من صحة التعبيرات التي أنشأها المستخدم.إنه؛شخصيات الهروب التي تعرفها ستعطل البرنامج النصي الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top