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