dubstep
August 11, 2011, 12:19am
#1
I have a regular expression:
Regexp.new(/^(\w+([-’]\w+))(\ \w+([-’]\w+) )+$/)
and I need to know the position of a invalid character.
For example, if a invalid character is a number, I can recover it using:
“gisele bund9chen”.index(/\d/)
But, I need generalize the regular expression to find any a character
different of \w, space ’ and -.
Thanks,
Carlos C.
On Aug 10, 2011, at 15:19 , Carlos C. wrote:
I have a regular expression:
Regexp.new(/^(\w+([-’]\w+))(\ \w+([-’]\w+) )+$/)
Regexp.new(regexp) is the same as regexp. Don’t wrap in Regexp.new for
no reason.
and I need to know the position of a invalid character.
For example, if a invalid character is a number, I can recover it using:
“gisele bund9chen”.index(/\d/)
/\d/ is to /[0-9]/ as /\D/ is to /[^0-9]/
But, I need generalize the regular expression to find any a character
different of \w, space ’ and -.
For more goodies see the regexp section of the ruby quickref.
Dear Camargo,
/((^| )[ -’]|[^\D’- ]/ or something like this
Try to follow the KISS principle. As a rule of thumb,
when something is getting too much complex, you might be doing it wrong.
Regards,
Luiz Angelo Daros de Luca, Me.
[email protected]
2011/8/10 Ryan D. [email protected]
Hi, De Luca and Davis,
Thanks for your help. I found a solution that works fine:
/( |-|’)( |-|’)|^( |-|’)|( |-|’)$|^$|\d|[^a-z
çáäãàâéèëêíìïöóòôõüúùû-’]/i
The solution proposed by De Luca doesn’t work for some characters (e.g.
“?”).
Best regards,
Carlos C.
Whoops.
I need to know the position of a invalid character.
str = %Q[gisele !’_"9? bundchen]
str.scan(/[^\w’ -]/) do |match|
md = Regexp.last_match
pos = md.begin(0)
puts “#{match} : #{pos}”
end
–output:–
! : 7
" : 10
? : 12
str = %Q[gisele !’_"9? bundchen]
str.scan(/[^\w’ -]/) do |match|
puts match
end
–output:–
!
"
?