Ajax Search Pro Knowledge Base
Buy Ajax Search Pro!DocumentationGet SupportDevelopment
  • Knowledge Base
  • Safe Coding Guideline
  • Hooks
    • Filters
      • Query & Output
        • asp_query_args
        • asp_query_{type}
        • asp_cached_content
        • asp_pre_get_front_filters
        • asp_before_ajax_output
        • asp_shortcode_output
        • asp_print_search_query
      • Keyword Suggestions
      • Search Results
        • asp_suggested_phrases
        • asp_results
        • asp_cpt_results
        • asp_buddyp_results
        • asp_attachment_results
        • asp_comment_results
        • asp_blog_results
        • asp_terms_results
        • asp_peepso_group_results
        • asp_peepso_activities_results
        • asp_only_keyword_results
        • asp_only_non_keyword_results
        • asp_result_groups
      • CSS & JS
        • asp_load_js
        • asp_load_css
        • asp_load_css_js
      • Template & Output
        • asp_icl_t
      • Index Table Related
        • asp_index_on_save_stop
        • asp_indexing_keywords
        • asp_indexing_string_pre_process
        • asp_indexing_string_post_process
        • asp_post_content_before_tokenize_clear
        • asp_post_content_before_tokenize
        • asp_post_excerpt_before_tokenize
        • asp_post_title_before_tokenize
        • asp_file_contents_before_tokenize
        • asp_post_permalink_before_tokenize
        • asp_index_terms
        • asp_post_custom_field_before_tokenize
        • asp_index_cf_contents_before_tokenize
        • asp_index_before_shortcode_execution
        • asp_index_after_shortcode_execution
    • Templating
      • Filter layouts Templating
      • Result Templating
    • Constants
  • Frontend Filters
    • Taxonomy Filters
      • Restricting results to the same category as the current post object
      • How to automatically check/select filter values based on the archive page?
    • Frontend filters API
  • Tips & Miscellaneous
    • Divi
      • Divi Blogs Live Search and Filter
    • Jet Engine
      • Jet Engine Listing Grid Live Search and Filter
      • Searching Jet Engine Custom Meta Storage fields
    • Tutorials
      • PDF results thumbnails
      • Demo setup: Staff search and Filter
      • Demo Setup: WooCommerce Search
      • Demo setup: WooCommerce Shop Search and Filter
      • Demo Setup: Events Search – Events Manager
      • Demo Setup: Events Search – The Events Calendar
      • Compact ‘pop-out’ search bar placement on specific pages only
      • Index Table – Indexing ACF repeater field titles and contents
      • Change Suggested Phrases conditionally
      • How to add shortcode to the results content?
      • How to add variables to the “redirect to url” or the “show more url”?
      • Indexing Shortcodes within custom field contents
    • Post Types
      • Index Table - Indexing child post contents to parent
      • Limit results to specific post IDs only
      • Filter posts (or CPT) which user can’t access
      • Restricting results by user Groups using the Groups plugin by itthinx
      • Limiting results to specific posts by parent ID
      • Limit results to current page children
      • Excluding posts or CPT by parent ID(s)
      • Searching posts, pages (or any CPT) by specified keywords only, nothing else
      • Showing the post type name in result title or content
      • Searching within given categories/taxonomy terms only
      • Search only in the same category as the current post or page (single page)
      • Search only within the current category (or any taxonomy) archive
      • Filtering pages by page template
    • Taxonomy Terms
      • Displaying taxonomy name in taxonomy term results
      • Limiting taxonomy term results to specific term IDs only
    • WooCommerce
      • Displaying On Sale products only in WooCommerce
      • Ordering product by stock status
      • Making a product in-stock & out of stock filter
      • Add to cart button for Vertical and Horizontal results
      • Get formatted price in result title or in content
      • Showing products in-stock only
      • Showing in-stock and backorder products only
      • Excluding hidden catalog products
      • Showing featured products first
      • How to search products & product SKU?
      • How to search Products by variation SKUs?
      • Search product attributes
      • How to search users by city, state, zip code… ?
    • Compatibility
      • WPML Compatibility issues and fixes
    • Files & Media
      • Searching Image EXIF metadata
    • Other
      • Restrict results from the current author archive page
      • Presetting search options via a custom URL
      • Matomo analytics tracking integration
      • Replace search keywords (whole words)
      • Replace or remove characters from search phrase
      • Adding spaces in search phrase between alphabetics and numbers
      • How to change the results URL to something else?
      • Numbering the results
      • How to use the search without the live ajax feature, as a regular search?
      • Empty search input field on the search results page
      • Singular and Plural keywords index
  • Other
    • SearchQuery
    • REST API
    • Building a custom REST API
    • Javascript API
    • Javascript Hooks
      • asp_redirect_url
      • asp_search_data
      • asp_live_load_html
      • asp_search_html
      • asp_compact_width
    • Theme Functions
Powered by GitBook
On this page
  • Issue example
  • Solution
  • Combined solution with extra character removal
  1. Tips & Miscellaneous
  2. Other

Adding spaces in search phrase between alphabetics and numbers

Changing search input for better fuzzy matching

PreviousReplace or remove characters from search phraseNextHow to change the results URL to something else?

Last updated 7 months ago

Often times combination of alphabetic and word inputs may yield no result if the input phrase is typed in without spaces.

Issue example

A post content contains these words:

Hello world 1235!

The user types in the following search phrase:

hello12345

The search will yield therefore NO result - because the search phrase "hello12345" does not match the content string in any way (phrase or it's parts are not a substring of the content).

For us humans this would be an obvious match, but the code can only look for parts of the search input. Words are by default only separated by word separators - commas, spaces, tabs etc..

Solution

// Adding whitespace between numeric and alphabetical words
add_filter(
	'asp_query_args',
	function ( $args ) {
		$previous_char = '';
		$new_string    = '';
		foreach ( mb_str_split($args['s']) as $char ) {
			if (
			( is_numeric($previous_char) && ctype_alpha($char) ) ||
			( is_numeric($char) && ctype_alpha($previous_char) )
			) {
				$new_string .= ' ' . $char;
			} else {
				$new_string .= $char;
			}
			$previous_char = $char;
		}
		$args['s'] = $new_string;

		return $args;
	}, 10, 1
);

The custom code above will look for alphanumerics and numbers (and vice versa) in sequence and add spaces between them. Therefore typing in:

hello12345

..becomes:

hello 12345

This will match the original post content, therefore resolves the issue.

Combined solution with extra character removal

In this knowledge base is a solution to replace some special word boundary characters, in case needed, here is a combination of the two codes.

// Special character removal & adding whitespace between numeric and alphabetical
add_filter(
	'asp_query_args',
	function ( $args ) {
		$characters   = "',._-?!"; // Type characters one after another
		$replace_with = ' ';     // Replace them with this (space by default)

		$args['s'] = str_replace(str_split($characters), $replace_with, $args['s']);

		$previous_char = '';
		$new_string    = '';
		foreach ( mb_str_split($args['s']) as $char ) {
			if (
				( is_numeric($previous_char) && ctype_alpha($char) ) ||
				( is_numeric($char) && ctype_alpha($previous_char) )
			) {
				$new_string .= ' ' . $char;
			} else {
				$new_string .= $char;
			}
			$previous_char = $char;
		}
		$args['s'] = $new_string;

		return $args;
	}, 10, 1
);

What is this, and where do I put this custom code?
What is this, and where do I put this custom code?