كيف يمكنك تنفيذ الكتابة بالأحرف الكبيرة تلقائيًا في JavaScript/HTML

StackOverflow https://stackoverflow.com/questions/107546

سؤال

أحتاج إلى تنفيذ الكتابة بالأحرف الكبيرة تلقائيًا داخل عنصر تحكم Telerik RadEditor على صفحة ASPX أثناء قيام المستخدم بالكتابة.

يمكن أن يكون هذا حلاً خاصًا بـ IE (IE6+).

أقوم حاليًا بالتقاط كل ضغطة مفتاح (لأسفل/لأعلى) أثناء كتابة المستخدم لدعم ميزة منفصلة تسمى "وحدات الماكرو" وهي في الأساس كلمات رئيسية قصيرة تتوسع إلى نص منسق.أي.يمكن للماكرو "so" أن يتوسع تلقائيًا عند الضغط على مفتاح المسافة إلى "stackoverflow".

ومع ذلك، لدي إمكانية الوصول إلى معلومات رمز المفتاح، كما أنني أستخدم أساليب TextRange لتحديد كلمة ("هكذا") وتوسيعها إلى "stackoverflow".وهكذا، لدي بعض مظاهر السياق.

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

نظرًا لأنني أراقب ضغطات المفاتيح لوحدات الماكرو، هل يجب علي فقط مراقبة علامات الترقيم (إنها أكثر من مجرد فترات تشير إلى حرف كبير) ووضع حد تلقائي للحرف التالي المكتوب، أم يجب علي استخدام TextRange وتحليل السياق؟

هل كانت مفيدة؟

المحلول

لست متأكدًا مما إذا كان هذا هو ما تحاول القيام به، ولكن إليك وظيفة (مرجع) لتحويل سلسلة معينة إلى حالة عنوان:

function toTitleCase(str) {
    return str.replace(/([\w&`'‘’"“.@:\/\{\(\[<>_]+-? *)/g, function(match, p1, index, title){ // ' fix syntax highlighting
        if (index > 0 && title.charAt(index - 2) != ":" && 
            match.search(/^(a(nd?|s|t)?|b(ut|y)|en|for|i[fn]|o[fnr]|t(he|o)|vs?\.?|via)[ -]/i) > -1)
            return match.toLowerCase();
        if (title.substring(index - 1, index + 1).search(/['"_{([]/) > -1)
            return match.charAt(0) + match.charAt(1).toUpperCase() + match.substr(2);
        if (match.substr(1).search(/[A-Z]+|&|[\w]+[._][\w]+/) > -1 ||
            title.substring(index - 1, index + 1).search(/[\])}]/) > -1)
            return match;
        return match.charAt(0).toUpperCase() + match.substr(1);
    });
}

نصائح أخرى

هل حاولت تطبيق تحويل النص نمط CSS لعناصر التحكم الخاصة بك؟

في بعض الأحيان، يكون عدم القيام بذلك هو الحل الصحيح لمشكلة البرمجة.

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

جان لوك "الملك" أوبراين ماكهنري فان دي جراف الرابع (دكتوراه، OBE)، ترك جهاز Macintosh الخاص به في ماكدونالدز مع أصدقائه MacIntosh وMacDonald.أعطى يسوع جهاز Atari الخاص به في حفل "Aids for الإيدز" التابع لشركة AT&T في شارع St George's St، مع Van Halen في شاحنة van Henry، يؤدي The Tempest.

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

ومع ذلك، إذا كان لديك المساحة والقدرة على تخزين وبحث مجموعة كبيرة من الكلمات ذات الحروف الكبيرة بشكل مناسب، فستكون قادرًا على الأقل على الحصول على طعنة جامحة في الحالة المرغوبة على الأرجح.

أنت تطرح سؤالا مثيرا للاهتمام.قد يكون التصرف بناءً على كل ضغطة على المفتاح أكثر تقييدًا لأنك لن تعرف ما يأتي مباشرة بعد رمز مفتاح معين (قد يعني تعقيد التراجع عن رد فعل يتبين أنه غير صحيح الاضطرار إلى الانتقال إلى روتين يستند إلى TextRange على أي حال).من المؤكد أنني لم أتصارع مع الكود حول هذه المشكلة حتى الآن، لذا فهذه فرضية في رأسي.

بأي حال من الأحوال، إليك وظيفة Title Casing (تنفيذ جافا مستوحى من أتمتة تدوين John Gruber) والتي قد تحفز الأفكار عندما يتعلق الأمر بالتعامل مع كود الغلاف الفعلي:

http://individed.com/code/to-title-case/

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