Minor mode solution
I too have had to deal with such a coding standard. My initial solution was identical to @Francesco's based on autopair.
However, I actually wanted to remove this padding in some cases, so made this minor-mode to be more flexible. I definitely recommend using it along with some kind of paired delimiter insertion tool (my favorite is autopair).
See: delim-pad
Using yasnippet
Going down your original track of using yasnippet ... ( BTW autopair and yasnippet are both written by João Távora, both are very powerful and flexible. kudos to that guy! )
Even if you got "[" recognized as a key, you would still have to keep pressing the trigger key to expand the snippet. That can get tired pretty quickly.
Yasnippet also allows you to bind snippets to keys directly, so this will work:
# -*- mode: snippet -*-
# name: beginsquare
# binding: [
# --
[ $0 ]