{"id":23336,"date":"2025-10-23T22:07:46","date_gmt":"2025-10-23T22:07:46","guid":{"rendered":"https:\/\/wedesignmarbella.com\/herramienta-de-conteo-de-caracteres-y-palabras\/"},"modified":"2026-07-02T11:01:39","modified_gmt":"2026-07-02T11:01:39","slug":"herramienta-de-conteo-de-caracteres-y-palabras","status":"publish","type":"page","link":"https:\/\/wedesignmarbella.com\/es\/herramientas\/herramienta-de-conteo-de-caracteres-y-palabras\/","title":{"rendered":"Herramienta de conteo de caracteres y palabras"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"23336\" class=\"elementor elementor-23336 elementor-15219\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-381ac6e e-flex e-con-boxed e-con e-parent\" data-id=\"381ac6e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-92aa32d elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"92aa32d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Herramienta de conteo de caracteres y palabras<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-012bdf5 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"012bdf5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Convierte f\u00e1cilmente tu texto a diferentes formatos con la herramienta de conversi\u00f3n de may\u00fasculas y min\u00fasculas. Ya sea que necesites may\u00fasculas, min\u00fasculas, may\u00fasculas iniciales, formato de serpiente o formato kebab, esta sencilla herramienta en l\u00ednea te permite transformar tu texto al formato deseado con un solo clic. Ideal para escritores, desarrolladores y cualquier persona que trabaje frecuentemente con transformaciones de texto.  <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-defaeca e-flex e-con-boxed e-con e-parent\" data-id=\"defaeca\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2286d8e elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"2286d8e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div>\r\n\r\n\r\n  <style>\r\n\r\n    textarea {\r\n      width: 100%;\r\n      height: 200px; \/* Increased height *\/\r\n      padding: 12px;\r\n      font-size: 16px; \/* Increased font size *\/\r\n      border: 1px solid #ccc;\r\n      border-radius: 4px;\r\n      resize: vertical; \/* Allow vertical resize *\/\r\n      box-sizing: border-box; \/* Fix padding issues *\/\r\n    }\r\n    .stats {\r\n      margin-top: 20px;\r\n      padding: 15px;\r\n      background-color: #f9f9f9;\r\n      border: 1px solid #ddd;\r\n      border-radius: 4px;\r\n      display: grid; \/* Use grid for alignment *\/\r\n      grid-template-columns: 1fr 1fr; \/* Two columns *\/\r\n      gap: 12px;\r\n    }\r\n    .stats span, .stats div {\r\n      display: block;\r\n      font-size: 15px;\r\n    }\r\n    .stats input {\r\n      width: 100px;\r\n      padding: 4px 8px;\r\n      font-size: 14px;\r\n      border: 1px solid #ccc;\r\n      border-radius: 4px;\r\n      margin-left: 5px;\r\n      box-sizing: border-box;\r\n    }\r\n    \/* Make some items span both columns *\/\r\n    .full-width {\r\n      grid-column: 1 \/ -1; \r\n    }\r\n    .percentage-bar {\r\n      width: 100%;\r\n      height: 8px;\r\n      background-color: #e0e0e0;\r\n      border-radius: 4px;\r\n      margin-top: 8px;\r\n      overflow: hidden; \/* Ensure inner span respects border-radius *\/\r\n    }\r\n    .percentage-bar-inner {\r\n      display: block;\r\n      height: 100%;\r\n      background-color: #4caf50;\r\n      transition: width 0.2s ease-out;\r\n    }\r\n  <\/style>\r\n\r\n\r\n\r\n<div class=\"container\">\r\n  <textarea id=\"inputText\" placeholder=\"Pegue su texto aqu\u00ed...\" oninput=\"updateStats()\"><\/textarea>\r\n  \r\n  <div class=\"stats\">\r\n    <span><strong>Caracteres (con espacios):<\/strong> <span id=\"charCount\">0<\/span><\/span>\r\n    <span><strong>Caracteres (sin espacios):<\/strong> <span id=\"charCountNoSpaces\">0<\/span><\/span>\r\n    <span><strong>Recuento de palabras:<\/strong> <span id=\"wordCount\">0<\/span><\/span>\r\n    <span><strong>Recuento de p\u00e1rrafos:<\/strong> <span id=\"paraCount\">0<\/span><\/span>\r\n    <span><strong>Longitud media de la palabra:<\/strong> <span id=\"avgWordLength\">0<\/span><\/span>\r\n    <span><strong>Legibilidad (Flesch-Kincaid):<\/strong> <span id=\"readabilityScore\">0<\/span><\/span>\r\n    \r\n    <div>\r\n      <strong>Palabra clave:<\/strong>\r\n      <input type=\"text\" id=\"keywordInput\" oninput=\"updateStats()\" placeholder=\"Introducir palabra clave\">\r\n    <\/div>\r\n    <span><strong>Densidad de palabras clave:<\/strong> <span id=\"keywordDensity\">0%<\/span><\/span>\r\n\r\n    <div class=\"full-width\">\r\n      <strong>Objetivo de l\u00edmite de caracteres:<\/strong>\r\n      <input type=\"number\" id=\"maxCharInput\" value=\"1000\" oninput=\"updateStats()\" min=\"1\">\r\n    <\/div>\r\n    <div class=\"percentage-bar full-width\">\r\n      <span id=\"charPercentage\" class=\"percentage-bar-inner\" style=\"width: 0%;\"><\/span>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n  function updateStats() {\r\n    const text = document.getElementById('inputText').value;\r\n    \r\n    \/\/ --- Counts ---\r\n    const charCountWithSpaces = text.length;\r\n    const charCountWithoutSpaces = text.replace(\/\\s+\/g, '').length;\r\n\r\n    \/\/ FIX: Filter out empty strings from the split array\r\n    const wordsArray = text.split(\/\\s+\/).filter(word => word.length > 0);\r\n    const wordCount = wordsArray.length;\r\n\r\n    const paraCount = text.split(\/\\n+\/).filter(p => p.trim() !== '').length;\r\n\r\n    \/\/ FIX: Check for wordCount > 0 to prevent NaN\r\n    const avgWordLength = wordCount > 0 ? (charCountWithoutSpaces \/ wordCount).toFixed(2) : 0;\r\n\r\n    \/\/ --- Readability ---\r\n    \/\/ FIX: Count non-empty text without punctuation as 1 sentence\r\n    let sentenceCount = (text.match(\/[.!?]+\/g) || []).length;\r\n    if (wordCount > 0 && sentenceCount === 0) {\r\n      sentenceCount = 1;\r\n    }\r\n\r\n    const syllables = wordsArray.reduce((acc, word) => acc + countSyllables(word), 0);\r\n    \r\n    const readabilityScore = (sentenceCount > 0 && wordCount > 0)\r\n      ? (206.835 - (1.015 * (wordCount \/ sentenceCount)) - (84.6 * (syllables \/ wordCount))).toFixed(2)\r\n      : 0;\r\n\r\n    \/\/ --- SEO (Now dynamic) ---\r\n    const keyword = document.getElementById('keywordInput').value.trim();\r\n    let keywordDensity = 0;\r\n    \r\n    if (keyword !== '' && wordCount > 0) {\r\n      const keywordCount = (text.match(new RegExp(keyword, 'gi')) || []).length;\r\n      keywordDensity = ((keywordCount \/ wordCount) * 100).toFixed(2);\r\n    }\r\n\r\n    \/\/ --- Percentage Bar (Now dynamic) ---\r\n    const maxCharCount = parseInt(document.getElementById('maxCharInput').value) || 1000;\r\n    const charPercentage = Math.min(100, (charCountWithSpaces \/ maxCharCount) * 100);\r\n\r\n    \/\/ --- Update DOM ---\r\n    document.getElementById('charCount').textContent = charCountWithSpaces;\r\n    document.getElementById('charCountNoSpaces').textContent = charCountWithoutSpaces;\r\n    document.getElementById('wordCount').textContent = wordCount;\r\n    document.getElementById('paraCount').textContent = paraCount;\r\n    document.getElementById('avgWordLength').textContent = avgWordLength;\r\n    document.getElementById('readabilityScore').textContent = readabilityScore;\r\n    document.getElementById('keywordDensity').textContent = `${keywordDensity}%`;\r\n    document.getElementById('charPercentage').style.width = charPercentage + '%';\r\n  }\r\n\r\n  \/\/ FIX: Improved syllable counting function\r\n  function countSyllables(word) {\r\n    word = word.toLowerCase().replace(\/[^a-z]\/g, '');\r\n    if (word.length === 0) return 0;\r\n    if (word.length <= 3) return 1; \/\/ Quick return for short words\r\n\r\n    \/\/ Remove silent 'e' at the end, but not if it's 'le'\r\n    if (word.endsWith('e') && !word.endsWith('le')) {\r\n      word = word.slice(0, -1);\r\n    }\r\n    \r\n    const vowelGroups = word.match(\/[aeiouy]+\/g);\r\n    let syllableCount = vowelGroups ? vowelGroups.length : 0;\r\n\r\n    \/\/ Handle 'le' endings (e.g., 'apple', 'table')\r\n    if (word.endsWith('le') && !\/[aeiouy]le$\/.test(word) && syllableCount > 0) {\r\n       \/\/ Check if the character before 'le' is a consonant\r\n       const charBeforeLe = word.charAt(word.length - 3);\r\n       if (!\/[aeiouy]\/.test(charBeforeLe)) {\r\n           syllableCount++;\r\n       }\r\n    }\r\n\r\n    return syllableCount > 0 ? syllableCount : 1; \/\/ Ensure at least 1\r\n  }\r\n\r\n  \/\/ Initial call to set stats to 0 on load\r\n  updateStats();\r\n<\/script>\r\n\r\n\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5fabd16 e-flex e-con-boxed e-con e-parent\" data-id=\"5fabd16\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-704b88d elementor-align-center elementor-widget__width-inherit elementor-widget elementor-widget-button\" data-id=\"704b88d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/wedesignmarbella.com\/es\/herramientas\/\" title=\"Back to Tools\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Volver a Herramientas<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Herramienta de conteo de caracteres y palabras Convierte f\u00e1cilmente tu texto a diferentes formatos con la herramienta de conversi\u00f3n de may\u00fasculas y min\u00fasculas. Ya sea que necesites may\u00fasculas, min\u00fasculas, may\u00fasculas iniciales, formato de serpiente o formato kebab, esta sencilla herramienta en l\u00ednea te permite transformar tu texto al formato deseado con un solo clic. Ideal [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":23340,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ai_generated_summary":"","footnotes":""},"class_list":["post-23336","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/wedesignmarbella.com\/es\/wp-json\/wp\/v2\/pages\/23336","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wedesignmarbella.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wedesignmarbella.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wedesignmarbella.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/wedesignmarbella.com\/es\/wp-json\/wp\/v2\/comments?post=23336"}],"version-history":[{"count":0,"href":"https:\/\/wedesignmarbella.com\/es\/wp-json\/wp\/v2\/pages\/23336\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/wedesignmarbella.com\/es\/wp-json\/wp\/v2\/pages\/23340"}],"wp:attachment":[{"href":"https:\/\/wedesignmarbella.com\/es\/wp-json\/wp\/v2\/media?parent=23336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}