تهريب رموز regex الخاصة للمطابقة الحرفية
اجعل أي نص آمناً للإدراج في تعبير نمطي: يصبح invoice.total [draft]? على الشكل invoice\.total \[draft\]\?، فتُطابَق النقطة والأقواس المربعة وعلامة الاستفهام كما هي بدلاً من أن تعمل كتعليمات. مجاناً في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
لا يمكن دائمًا إدراج النص الحرفي مباشرة في تعبير نمطي. فالنقطة وعلامة الاستفهام والأقواس المربعة والشرطة المائلة العكسية تعليمات لها معنى خاص في صياغة regex، ولذلك قد تطابق القيمة غير المهرّبة نصًا غير مقصود أو تجعل النمط غير صالح. تحوّل هذه الإمكانية السلسلة إلى جزء من نمط ECMAScript يعامل جميع الرموز الوصفية في regex معاملة حرفية. وهي مفيدة عند إدخال عبارات البحث وأسماء الملفات والمعرّفات والتسميات وغيرها من القيم التي يقدمها المستخدمون ضمن تعبير نمطي أكبر من دون تغيير معناها.
حوّلوا النص الحرفي إلى جزء آمن من النمط
أرسلوا في حقل text القيمة الدقيقة التي تريدون من التعبير النمطي مطابقتها. تتضمن النتيجة escaped، وهو جزء من نمط تسبق فيه شرطة مائلة عكسية كل رمز وصفي خاص بتعبيرات ECMAScript النمطية. تبقى الحروف والأرقام والمسافات وعلامات الترقيم التي لا تحمل معنى في regex وفواصل الأسطر ومحارف Unicode بلا تغيير.
فالنقطة مثلًا تعني عادة أي محرف واحد في التعبير النمطي، أما النقطة المهرّبة فتعني نقطة فعلية. وتنشئ الأقواس المستديرة عادة مجموعة، وتفتح الأقواس المربعة فئة محارف، وقد تبدأ الأقواس المعقوفة عددًا للتكرار، بينما تتحكم علامة الاستفهام والنجمة في التكرار. يحافظ تهريب هذه الرموز على المعنى الحرفي للقيمة الأصلية.
لا يتضمن الجزء الناتج شرطات مائلة فاصلة ولا أعلامًا، ولذلك يمكنكم تمريره مباشرة إلى باني RegExp أو إدراجه في نمط أكبر أو حفظه بوصفه متن النمط. وتُقبل السلسلة الفارغة، وتنتج قيمة escaped فارغة لأنه لا توجد محارف تحتاج إلى تحويل.
ادمجوا القيمة المهرّبة مع صياغة regex مقصودة
يفيد التهريب خصوصًا عندما يأتي جزء من النمط من البيانات بينما يُكتب الجزء الآخر عمدًا بصياغة regex. افترضوا أن تطبيقًا يحتاج إلى العثور على رمز منتج أدخله مستخدم، ولكن في بداية السطر فقط. هرّبوا رمز المنتج أولًا، ثم أضيفوا مرساة البداية وأي منطق حدود مطلوب.
يفصل ذلك بوضوح بين بنية النمط الموثوقة والمحتوى الحرفي. لا تهرّبوا النمط كاملًا بعد تركيبه، لأن هذا سيعطّل أيضًا المراسي والمجموعات والبدائل ومحددات الكم التي أردتم إبقاءها فعالة. تستهدف النتيجة متن نمط ECMAScript، لا طريقة كتابته في مصدر JavaScript.
وهذا فرق مهم: فالشرطة المائلة العادية ليست خاصة داخل باني RegExp، لذا تبقى كما هي. إذا وضعتم النتيجة في تعبير regex حرفي محاط بشرطات مائلة داخل مصدر JavaScript مولّد، فإن تهريب الفاصل على مستوى المصدر خطوة مستقلة. في شيفرة التطبيقات المعتادة، يُفضّل تمرير السلسلة المهرّبة إلى new RegExp واختيار الأعلام بصورة منفصلة.
افهموا الضمان وتحققوا من التصميم المحيط
التحويل حتمي وخطي: فهو يمر على السلسلة المقدمة ويضع شرطة مائلة عكسية قبل المحارف التي تتحكم في صياغة تعبيرات ECMAScript النمطية. لا يستخدم الشبكة، ولا ينفذ التعبير الناتج، ولا يختار الأعلام، ولا يضيف المراسي، ولا يقرر ما إذا كانت المطابقة حساسة لحالة الأحرف. تعود هذه القرارات إلى التطبيق المحيط لأنها تغير سلوك المطابقة لا السلامة الحرفية.
لكل تنسيق قواعد تهريب خاصة، وعند جمعها مع تهريب regex يجب تطبيق كل طبقة عند الحد الصحيح. بعد تركيب النمط، اختبروا التعبير الكامل بأمثلة ممثلة يجب أن تتطابق وأخرى يجب ألا تتطابق، ولا سيما عند إضافة أجزاء اختيارية أو بدائل حول الجزء المهرّب.
حالات الاستخدام
إنشاء بحث حرفي
حوّلوا عبارة البحث إلى جزء آمن من regex قبل إضافة المراسي أو الأعلام المقصودة.
مطابقة أسماء الملفات والمعرّفات
حافظوا على النقاط والأقواس وعلامات الجمع وغيرها من محارف الصياغة داخل القيم الدقيقة.
حماية تركيب الأنماط الديناميكي
أبقوا النص الذي يقدمه المستخدمون حرفيًا، ودعوا الشيفرة الموثوقة تضيف بنية regex المحيطة.
الأسئلة الشائعة
ما المحارف التي يجري تهريبها؟
تُهرّب الشرطة المائلة العكسية وعلامة القبعة والدولار والنقطة والخط العمودي وعلامة الاستفهام والنجمة والجمع والأقواس المستديرة والمربعة والمعقوفة.
هل تتضمن النتيجة فواصل regex؟
لا. القيمة المهرّبة هي متن نمط ECMAScript أو جزء منه من دون شرطات مائلة فاصلة حوله.
لماذا لا تُهرّب الشرطة المائلة العادية؟
لأنها ليست خاصة داخل نمط ECMAScript يُمرر إلى باني RegExp. أما تهريب فاصل التعبير في المصدر فهو مهمة أخرى عند توليد JavaScript.
هل يمكنني إضافة المراسي أو الأعلام؟
نعم. أضيفوا صياغة regex المقصودة حول الجزء المهرّب، ومرروا الأعلام منفصلة عند إنشاء التعبير النمطي الكامل.
ماذا يحدث مع السلسلة الفارغة؟
تُقبل وتعيد قيمة escaped فارغة تمثل قيمة حرفية طولها صفر.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/dev2/regex-special-char-escape \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"invoice.total (USD) [draft]?"}'const res = await fetch("https://api.kit.forhosting.com/dev2/regex-special-char-escape", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "invoice.total (USD) [draft]?"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/regex-special-char-escape",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "invoice.total (USD) [draft]?"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/regex-special-char-escape", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"invoice.total (USD) [draft]?"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"invoice.total (USD) [draft]?"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/regex-special-char-escape", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"text": "invoice.total (USD) [draft]?"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.regex_special_char_escape",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
افهموا الضمان وتحققوا من التصميم المحيط
كذلك لا تقتبس هذه الإمكانية القيمة من أجل سلسلة حرفية في لغة برمجة أو مستند JSON أو أمر صدفة أو سمة HTML أو URL. تُرفض المدخلات غير النصية بخطأ invalid_input بدل تحويلها، وبذلك لا تتحول الأرقام أو المصفوفات أو الكائنات أو null أو القيم المنطقية بصمت إلى نص نمط مفاجئ. تستخدم طلبات API السعر الأساسي المنشور وقدره $0.002.
أسئلة تقنية
ماذا يحدث إذا لم يكن text سلسلة؟
يفشل الطلب بخطأ invalid_input، ولا تُحوّل القيم ضمنيًا.
ما تكلفة طلب API؟
السعر الأساسي لطلب API هو $0.002 لكل طلب، ويمكن تنفيذ العملية الحتمية نفسها في المتصفح أيضًا.