محوّل الحالة
حوّل النص بين الأحرف الكبيرة والصغيرة وحالة العنوان و camelCase و snake_case والمزيد
الإدخال
الناتج
ما هو تحويل حالة النص؟
تحويل حالة النص هو عملية تغيير نمط كتابة الأحرف أو فصل الكلمات في سلسلة نصية. يأخذ محوّل الحالة نصاً مثل "hello world" ويحوّله إلى UPPERCASE أو lowercase أو Title Case أو camelCase أو snake_case أو kebab-case أو اصطلاحات أخرى. التحويل مباشر مع النصوص البسيطة في ASCII، لكن حالات استثنائية تظهر مع الاختصارات ("XMLParser")، والقواعد الخاصة بالإعدادات المحلية (حرف I التركي بالنقطة)، والنصوص المختلطة.
تفرض لغات البرمجة وأنظمة الملفات وأدلة الأسلوب كلٌّ منها اصطلاحات تسمية خاصة بها. متغيرات JavaScript تستخدم عادةً camelCase. دوال Python ومتغيراتها تتبع snake_case وفق PEP 8. أسماء فئات CSS تستخدم kebab-case. أعمدة قواعد البيانات تتفاوت من فريق لآخر، لكن snake_case يسود في PostgreSQL وMySQL. التبديل يدوياً بين هذه الاصطلاحات بطيء وعرضة للأخطاء، خاصةً عند إعادة التسمية عبر عشرات الملفات.
اصطلاحات الحالة مهمة أيضاً خارج نطاق الكود. تتبع Title Case قواعد محددة في أدلة الأسلوب كـChicago Manual of Style وAPA، حيث تبقى الأدوات والحروف الجارة القصيرة بأحرف صغيرة ما لم تكن في بداية الجملة. أما Sentence case فتكتب الحرف الأول من الجملة والأسماء العلم فقط بأحرف كبيرة. تُفضّل الكتابة باللغة الإنجليزية الأمريكية استخدام Title Case في العناوين؛ بينما تستخدم معظم الوثائق الأوروبية والتقنية Sentence case.
لماذا تستخدم محوّل الحالة هذا؟
الصق أي نص وحوّله فوراً بين تسعة تنسيقات للحالة، دون تثبيت امتداد VS Code أو كتابة سكريبت مخصص.
حالات استخدام محوّل الحالة
مرجع اصطلاحات الحالة
لكل اصطلاح تسمية قواعد محددة للكتابة بالأحرف الكبيرة وفصل الكلمات. يعرض الجدول أدناه التسعة تنسيقات التي تدعمها هذه الأداة، مع العبارة "the quick brown fox" كمرجع.
| الحالة | القاعدة | مثال |
|---|---|---|
| UPPERCASE | Every letter capitalized | THE QUICK BROWN FOX |
| lowercase | Every letter lowercased | the quick brown fox |
| Title Case | First letter of each word capitalized | The Quick Brown Fox |
| Sentence case | First letter of each sentence capitalized | The quick brown fox |
| camelCase | No separators, first word lowercase | theQuickBrownFox |
| PascalCase | No separators, every word capitalized | TheQuickBrownFox |
| snake_case | Words joined by underscores, all lowercase | the_quick_brown_fox |
| kebab-case | Words joined by hyphens, all lowercase | the-quick-brown-fox |
| CONSTANT_CASE | Words joined by underscores, all uppercase | THE_QUICK_BROWN_FOX |
camelCase مقابل snake_case مقابل kebab-case
تسود هذه الاصطلاحات الثلاثة في تطوير البرمجيات، لكن كلاً منها ينتمي إلى بيئة مختلفة. اختيار الاصطلاح الخاطئ يُعطّل أدوات الفحص، يُخل بعقود API، أو ينتج قواعد كود غير متسقة.
أمثلة برمجية
كيفية التحويل بين اصطلاحات الحالة برمجياً. يغطي كل مثال أكثر التحويلات شيوعاً: من camelCase إلى snake_case، ومن snake_case إلى camelCase، والتحويلات الأساسية للأحرف الكبيرة والصغيرة وحالة العنوان.
// camelCase → snake_case
function toSnakeCase(str) {
return str
.replace(/([a-z])([A-Z])/g, '$1_$2')
.replace(/[\s-]+/g, '_')
.toLowerCase()
}
toSnakeCase('myVariableName') // → "my_variable_name"
toSnakeCase('kebab-case-str') // → "kebab_case_str"
// snake_case → camelCase
function toCamelCase(str) {
return str
.toLowerCase()
.replace(/[_-](\w)/g, (_, c) => c.toUpperCase())
}
toCamelCase('my_variable_name') // → "myVariableName"
// Title Case
function toTitleCase(str) {
return str.replace(/\w\S*/g, w =>
w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()
)
}
toTitleCase('the quick brown fox') // → "The Quick Brown Fox"import re
text = "the quick brown fox"
# UPPERCASE / lowercase
text.upper() # → "THE QUICK BROWN FOX"
text.lower() # → "the quick brown fox"
# Title Case
text.title() # → "The Quick Brown Fox"
# camelCase
def to_camel(s):
words = re.split(r'[\s_-]+', s)
return words[0].lower() + ''.join(w.capitalize() for w in words[1:])
to_camel("my_variable_name") # → "myVariableName"
# snake_case from camelCase
def to_snake(s):
return re.sub(r'([a-z])([A-Z])', r'\1_\2', s).lower()
to_snake("myVariableName") # → "my_variable_name"
# kebab-case
def to_kebab(s):
return re.sub(r'([a-z])([A-Z])', r'\1-\2', s).replace('_', '-').lower()
to_kebab("myVariableName") # → "my-variable-name"package main
import (
"fmt"
"regexp"
"strings"
)
// camelCase → snake_case
func toSnake(s string) string {
re := regexp.MustCompile("([a-z])([A-Z])")
snake := re.ReplaceAllString(s, "${1}_${2}")
return strings.ToLower(snake)
}
// snake_case → camelCase
func toCamel(s string) string {
parts := strings.Split(strings.ToLower(s), "_")
for i := 1; i < len(parts); i++ {
parts[i] = strings.Title(parts[i])
}
return strings.Join(parts, "")
}
func main() {
fmt.Println(toSnake("myVariableName")) // → my_variable_name
fmt.Println(toCamel("my_variable_name")) // → myVariableName
fmt.Println(strings.ToUpper("hello")) // → HELLO
fmt.Println(strings.ToUpper("hello world")) // → HELLO WORLD
}# UPPERCASE echo "hello world" | tr '[:lower:]' '[:upper:]' # → HELLO WORLD # lowercase echo "HELLO WORLD" | tr '[:upper:]' '[:lower:]' # → hello world # camelCase → snake_case (using sed) echo "myVariableName" | sed 's/\([a-z]\)\([A-Z]\)/\1_\2/g' | tr '[:upper:]' '[:lower:]' # → my_variable_name # snake_case → kebab-case echo "my_variable_name" | tr '_' '-' # → my-variable-name