# Is equivalent to \[A-Za-z0-9\]?

**URL:** <https://www.ruby-forum.com/t/is-equivalent-to-a-za-z0-9/81607>\
**Category:** Ruby\
**Created:** [January 10, 2007, 3:37pm UTC](https://www.ruby-forum.com/t/is-equivalent-to-a-za-z0-9/81607 "2007-01-10T15:37:02Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![jeff](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19b73/32.png) [@jeff](https://www.ruby-forum.com/u/jeff)\
**Post date:** [January 10, 2007, 3:37pm UTC](https://www.ruby-forum.com/t/is-equivalent-to-a-za-z0-9/81607/1 "2007-01-10T15:37:02Z")

</div>

Hi,

I’m trying to creating a regex that will match a string that starts and  
ends with an alphanumeric character, and has alphanumeric characters or  
dashes in the middle.

This regex gives the expected result:  
irb(main):008:0\> /^[:alnum:][A-Za-z0-9-]_[A-Za-z0-9]$/ =~ “apple!”  
=\> nil  
irb(main):009:0\> /^[:alnum:][A-Za-z0-9-]_[A-Za-z0-9]$/ =~ “apple”  
=\> 0

This regex works as expected on “apple!”, but returns nil on “apple”:  
irb(main):010:0\> /^[:alnum:][A-Za-z0-9-]_[:alnum:]$/ =~ “apple!”  
=\> nil  
irb(main):011:0\> /^[:alnum:][A-Za-z0-9-]_[:alnum:]$/ =~ “apple”  
=\> nil

Can anyone explain this?

Thanks,  
Jeff

---

<div class="post-metadata">

**Author:** ![jeff](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19b73/32.png) [@jeff](https://www.ruby-forum.com/u/jeff)\
**Post date:** [January 10, 2007, 3:48pm UTC](https://www.ruby-forum.com/t/is-equivalent-to-a-za-z0-9/81607/2 "2007-01-10T15:48:05Z")

</div>

Jeff wrote:

> =\> 0
> 
> This regex works as expected on “apple!”, but returns nil on “apple”:  
> irb(main):010:0\> /^[:alnum:][A-Za-z0-9-]_[:alnum:]$/ =~ “apple!”  
> =\> nil  
> irb(main):011:0\> /^[:alnum:][A-Za-z0-9-]_[:alnum:]$/ =~ “apple”  
> =\> nil
> 
> Can anyone explain this?

Yes, that’s a classical mistake: POSIX specifications of this kind  
must be included inside other []. Try rather

/^[[:alnum:]][A-Za-z0-9-]\*[[:alnum:]]$/

The way you wrote it just meant ‘:’ or ‘a’ or ‘l’ or…

Vince

---

<div class="post-metadata">

**Author:** ![jeff](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19b73/32.png) [@jeff](https://www.ruby-forum.com/u/jeff)\
**Post date:** [January 10, 2007, 3:58pm UTC](https://www.ruby-forum.com/t/is-equivalent-to-a-za-z0-9/81607/3 "2007-01-10T15:58:03Z")

</div>

> /^[[:alnum:]][A-Za-z0-9-]\*[[:alnum:]]$/

Incidentally, the dash doesn’t need to be escaped in the character class  
if you put it first:

/^[[:alnum:]][-A-Za-z0-9]\*[[:alnum:]]$/

best,  
Dan

---

<div class="post-metadata">

**Author:** ![jeff](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/e19b73/32.png) [@jeff](https://www.ruby-forum.com/u/jeff)\
**Post date:** [January 10, 2007, 8:35pm UTC](https://www.ruby-forum.com/t/is-equivalent-to-a-za-z0-9/81607/4 "2007-01-10T20:35:19Z")

</div>

VIncent and Daniel,

Thanks very much.

– Jeff
