tags:

views:

30

answers:

2

I have a problem to extract only 'a-zA-Z0-9- _' from string.

Example;

If i input "A cat นกห 004-1 กกกกก" it show me only 'a-cat-004-1'

or

if i input "aa مقتطف 4-5 aaa" --> 'aa-5-4-aaa'

any idea?

+3  A: 

Do the following:

  • Replace [^a-zA-Z0-9_ -] by nothing. This eliminates any characters you don't want.
  • Trim whitespace from the start and end of the string.
  • Replace ' +' (one or more spaces) by -
  • Convert the string to lower-case.

At least that's what I can guess what you want there. Your examples don't match your problem description. The part about the spaces and lower-case was inferred from your examples since you didn't mention it.

In PowerShell this might look like the following:

PS> (('A cat นกห 004-1 กกกกก' -replace '[^a-zA-Z0-9_ -]').Trim() -replace ' +','-').ToLower()
a-cat-004-1

PS> (('aa مقتطف 4-5 aaa' -replace '[^a-zA-Z0-9_ -]').Trim() -replace ' +','-').ToLower()
aa-4-5-aaa

Adapt accordingly for PHP or Javascript. Both support regular expressions and string functions.

Joey
A: 
preg_replace('/[^a-zA-Z0-9- _]/u', "", $original);
Artefacto
@Artefacto thank for your answer!!
Giffary