Edit in JSFiddle

/*--------------------------------------------------------------------------

  jq-idealforms 2.0

  * Author: Cedric Ruiz
  * License: GPLv2
  * Demo: http://elclanrs.github.com/jq-idealforms/

--------------------------------------------------------------------------*/

;(function ($) {

  'use strict';

/*--------------------------------------------------------------------------*/

  /**
   * @namespace A chest for various Utils
   */
  var Utils = {
    /**
     * Get width of widest element in the collection.
     * @memberOf Utils
     * @param {jQuery object} $elms
     * @returns {number}
     */
    getMaxWidth: function ($elms) {
      var maxWidth = 0
      $elms.each(function () {
        if ($(this).outerWidth() > maxWidth) {
          maxWidth = $(this).outerWidth()
        }
      })
      return maxWidth
    },
    /**
     * Hacky way of getting LESS variables
     * @memberOf Utils
     * @param {string} name The name of the LESS class.
     * @param {string} prop The css property where the data is stored.
     * @returns {number, string}
     */
    getLessVar: function (name, prop) {
      var value = $('<p class="' + name + '"></p>').hide().appendTo('body').css(prop)
      $('.' + name).remove()
      return (/^\d+/).test(value) ? parseInt(value, 10) : value
    }
  }

/*--------------------------------------------------------------------------*/

  /**
   * @namespace Contains LESS data
   */
  var LessVars = {
    fieldWidth: Utils.getLessVar('ideal-field-width', 'width')
  }

/*--------------------------------------------------------------------------*/

  /**
   * A custom <select> menu jQuery plugin
   * @example `$('select').toCustomSelect()`
   */
  $.fn.toCustomSelect = function () {

    return this.each(function () {
      var $select = $(this)

      /**
       * Markup and elements of custom select
       * @memberOf $.fn.toCustomSelect
       * @returns {object} All elements of the new select replacement
       */
      var Select = (function () {
        var $options = $select.find('option'),
            $newSelect = $('<ul class="ideal-select"/>'),
            $menu = $('<li><span class="title">' + $options.filter(':selected').text() + '</span></li>'),
            items = (function () {
              var items = []
              $options.each(function () {
                var $this = $(this)
                items.push('<li><span class="item" ideal-value="' + $this.val() + '">' + $this.text() + '</span></li>')
              })
              return items
            }())

        $menu.append('<ul class="sub">' + items.join('') + '</ul>')
        $newSelect.append($menu)

        return {
          options: $options,
          select: $newSelect,
          title: $menu.find('.title'),
          sub: $menu.find('.sub'),
          items: $menu.find('.sub li')
        }
      }())

      /**
       * @namespace Methods of custom select
       * @memberOf $.fn.toCustomSelect
       */
      var Actions = {
        /**
         * @private
         */
        init: (function () {
          $select.css({
            position: 'absolute',
            left: '-9999px'
          })
          Select.select.insertAfter($select)
          Select.sub.hide()
          Select.items.eq(Select.options.filter(':selected').index()).find('span').addClass('selected')
        }()),
        noWindowScroll: function (e) {
          if (e.which === 40 || e.which === 38 || e.which === 13) {
            e.preventDefault()
          }
        },
        // Fix loosing focus when scrolling
        // and selecting item with keyboard
        focusHack: function () {
          setTimeout(function () {
            $select.trigger('focus')
          }, 1)
        },
        focus: function () {
          Select.select.addClass('focus')
          $(document).on('keydown.noscroll', Actions.noWindowScroll)
        },
        blur: function () {
          Select.select.removeClass('open focus')
          $(document).off('.noscroll')
        },
        scrollIntoView: function (dir) {
          var $selected = Select.items.find('.selected').parent(),
              itemHeight = $selected.outerHeight(),
              menuHeight = Select.sub.outerHeight(),
              isInView = (function () {
                var elPos = $selected.position().top + itemHeight
                return dir === 'down' 
                  ? elPos <= menuHeight 
                  : elPos > 0
              }())

          if (!isInView) {
            itemHeight = (dir === 'down') 
              ? itemHeight 
              : -itemHeight
            Select.sub.scrollTop(Select.sub.scrollTop() + itemHeight)
          }
        },
        scrollToItem: function () {
          var idx = Select.items.find('.selected').parent().index(),
              height = Select.items.outerHeight(),
              items = Select.items.length,
              allHeight = height * items,
              curHeight = height * (items - idx)

          Select.sub.scrollTop(allHeight - curHeight)
        },
        showMenu: function () {
          Select.sub.show()
          Select.select.addClass('open')
          Actions.select(Select.options.filter(':selected').index())
          Actions.scrollToItem()
        },
        hideMenu: function () {
          Select.sub.hide()
          Select.select.removeClass('open')
        },
        select: function (idx) {
          Select.items.find('span').removeClass('selected')
          Select.items.eq(idx).find('span').addClass('selected')
        },
        change: function (idx) {
          var text = Select.items.eq(idx).text()
          Actions.select(idx)
          Select.title.text(text)
          Select.options.eq(idx).prop('selected', true)
          $select.trigger('change')
        },
        keydown: function (key) {
          var idx = Select.items.find('.selected').parent().index()
          /**
           * @namespace Key pressed
           */
          var keys = {
            9: function () { // TAB
              if (Select.select.is('.menu')) {
                Actions.blur()
                Actions.hideMenu()
              }
            },
            13: function () { // ENTER
              if (Select.select.is('.menu')) {
                Select.select.is('.open')
                  ? Actions.hideMenu()
                  : Actions.showMenu()
              }
              Actions.change(idx)
            },
            27: function () { // ESC
              if (Select.select.is('.menu')) Actions.hideMenu()
            },
            40: function () { // DOWN
              if (idx < Select.options.length - 1) {
                Select.select.is('.open')
                  ? Actions.select(idx + 1)
                  : Actions.change(idx + 1)
              }
              Actions.scrollIntoView('down')
            },
            38: function () { // UP
              if (idx > 0) {
                Select.select.is('.open')
                  ? Actions.select(idx - 1)
                  : Actions.change(idx - 1)
              }
              Actions.scrollIntoView('up')
            },
            'default': function () { // Letter
              var letter = String.fromCharCode(key),
                  selIdx = Select.items.find('.selected').parent().index(),
                  curIdx = Select.items.filter(function () {
                    var re = new RegExp('^' + letter, 'i')
                    return re.test($(this).text())
                  }).first().index()

              Actions.change(!~curIdx ? selIdx : curIdx)
              Actions.scrollToItem()
              Actions.focusHack()
            }
          }
          keys[key] ? keys[key]() : keys['default']()
        }
      }

      /**
       * @namespace Holds all events of custom select for "menu mode" and "list mode"
       * @memberOf $.fn.toCustomSelect
       */
      var events = {
        focus: Actions.focus,
        'blur.menu': function () {
          Actions.blur()
          Actions.hideMenu()
        },
        'blur.list': function () {
          Actions.blur()
        },
        keydown: function (e) {
          Actions.keydown(e.which)
        },
        'clickItem.menu': function () {
          Actions.change($(this).index())
          Actions.hideMenu()
        },
        'clickItem.list': function () {
          Actions.change($(this).index())
        },
        'clickTitle.menu': function () {
          Actions.focus()
          Actions.showMenu()
          $select.trigger('focus')
        },
        'hideOutside.menu': function () {
          $select.off('blur.menu')
          $(document).on('mousedown.ideal', function (evt) {
            if (!$(evt.target).closest(Select.select).length) {
              $(document).off('mousedown.ideal')
              $select.on('blur.menu', events['blur.menu'])
            } else {
              Actions.focusHack()
            }
          })
        },
        'mousedown.list': function () {
          Actions.focusHack()
        }
      }

      // Bind events
      var disableEvents = function () {
        Select.select.removeClass('menu list')
        $select.off('.menu .list')
        Select.items.off('.menu .list')
        Select.select.off('.menu .list')
        Select.title.off('.menu .list')
      }

      // Menu
      Select.select.on('menu', function () {
        disableEvents()
        Select.select.addClass('menu')
        Actions.hideMenu()
        $select.on({
          'blur.menu': events['blur.menu'],
          'focus.menu': events.focus,
          'keydown.menu': events.keydown
        })
        Select.select.on('mousedown.menu', events['hideOutside.menu'])
        Select.items.on('click.menu', events['clickItem.menu'])
        Select.title.on('click.menu', events['clickTitle.menu'])
      })

      // List
      Select.select.on('list', function () {
        disableEvents()
        Select.select.addClass('list')
        Actions.showMenu()
        $select.on({
          'blur.list': events['blur.list'],
          'focus.list': events.focus,
          'keydown.list': events.keydown
        })
        Select.select.on('mousedown.list', events['mousedown.list'])
        Select.items.on('mousedown.list', events['clickItem.list'])
      })

      Select.select.on('menu') // Default to "menu mode"
    })
  }  

/*--------------------------------------------------------------------------*/

    /**
     * A custom <input type="radio|checkbox"> jQuery plugin
     * @example `$(':radio, :checkbox').toCustomRadioCheck()`
     */
    $.fn.toCustomRadioCheck = function () {
      return this.each(function () {
        var $this = $(this),
            $span = $('<span/>')

        $this.is(':checkbox') ? $span.addClass('ideal-check') : $span.addClass('ideal-radio')

        if ($this.is(':checked')) $span.addClass('checked')
        $span.insertAfter($this)

        $this
          .css({
            position: 'absolute',
            left: '-9999px'
          })
          .on({
            change: function () {
              var $this = $(this)
              $this.trigger('focus')
              if ($this.is(':radio')) {
                $this.parent().siblings('label').children('.ideal-radio').removeClass('checked')
                $this.next('.ideal-radio').addClass('checked')
              } else {
                $this.is(':checked')
                  ? $span.addClass('checked')
                  : $span.removeClass('checked')
              }
            },
            focus: function () {
              $span.parent().addClass('focus')
            },
            blur: function () {
              $span.parent().removeClass('focus')
            },
            click: function () {
              $(this).trigger('focus')
            }
          })
      })
    }

/*--------------------------------------------------------------------------*/

  /**
   * @namespace All default filters used for validation
   */
  var Filters = {
    number: {
      regex: /\d+/,
      error: 'Must be a number.'
    },
    digits: {
      regex: /^\d+$/,
      error: 'Must be only digits.'
    },
    name: {
      regex: /^[A-Za-z]{3,}$/,
      error: 'Must be at least 3 characters long, and must only contain letters.'
    },
    username: {
      regex: /^[a-z](?=[\w.]{3,31}$)\w*\.?\w*$/i,
      error: '名前の項目のエラーです。エラーメッセージはこのように表示されます。問題なければ別のメッセージが表示されます。'
    },
    pass: {
      regex: /(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}/,
      error: 'パスワードの項目のエラーです。エラーメッセージはこのように表示されます。問題なければ別のメッセージが表示されます。'
    },
    strongpass: {
      regex: /(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,
      error: 'パスワードが弱い場合のエラーメッセージです。問題なければ別のメッセージが表示されます。'
    },
    email: {
      regex: /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/,
      error: 'メールアドレスのかき方が違うみたいです。'
    },
    phone: {
      regex: /^[2-9]\d{2}-\d{3}-\d{4}$/,
      error: '電話番号のかき方が違うみたいです。'
    },
    zip: {
      regex: /^\d{5}$|^\d{5}-\d{4}$/,
      error: '郵便番号が存在しないみたいです。みたいなエラーを出します。'
    },
    url: {
      regex: /^(?:(ftp|http|https):\/\/)?(?:[\w\-]+\.)+[a-z]{3,6}$/i,
      error: 'URLのエラー項目でエラーがあるみたいです。'
    },
    min: {
      regex: function (input, value) {
        var min = input.userOptions.data.min
        if (input.input.is(':checkbox, :radio')) {
          this.error = '最低でも<strong>' + min + '</strong>文字は使ってください'
          return input.input.filter(':checked').length >= min
        }
        this.error = '少なくとも<strong>' + min + '</strong>文字の長さでなければなりません。'
        return value.length > min - 1
      }
    },
    max: {
      regex: function (input, value) {
        var max = input.userOptions.data.max
        this.error = '最大で<strong>' + max + '</strong>文字までです。'
        return value.length <= max
      }
    },
    date: {
      regex: function (input, value) {
        var match = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.exec(value),
            isDate = function (m, d, y) {
              return m > 0 && m < 13 && y > 0 && y < 32768 && d > 0 && d <= (new Date(y, m, 0)).getDate()
            }
        return match && isDate(match[1], match[2], match[3])
      },
      error: '誕生日は05/30/1979という形で入力します。</em>'
    },
    exclude: {
      regex: function (input, value) {
        this.error = '"' + value + '" は使用できません'
        return !~$.inArray(value, input.userOptions.data.exclude)
      }
    }
  }

/*--------------------------------------------------------------------------*/

  /**
   * @namespace jq-idealforms jQuery plugin
   */
  $.fn.idealforms = function (ops) {

      // Default options
      var o = $.extend({
        inputs: {},
        onSuccess: function (e) {
          alert('送信されました。(これはダミーです)')
        },
        onFail: function () {
          // What happens on submit if the form
          // does NOT validate.
          alert('入力ミスがアルっぽいです。入力内容を確認して下さい。')
        },
        filters: {
          // Add your own filters
          // ie. myfilter: { regex: /something/, error: 'My error' }
        },
        responsiveAt: 'auto',
        customInputs: true
      }, ops)

      // Merge custom and default filters
      $.extend(true, Filters, o.filters)

/*--------------------------------------------------------------------------*/

      var $form = this,
          /**
           * @namespace All form inputs of the given form
           * @memberOf $.fn.idealforms
           * @returns {object}
           */
          FormInputs = (function () {
            var $inputs = $form.find('input, select, textarea, :button'),
                $labels = $form.find('label:first-child'),
                $text = $inputs.filter(':text, :password, textarea'),
                $select = $inputs.filter('select'),
                $radiocheck = $inputs.filter(':checkbox, :radio'),
                $buttons = $inputs.filter(':button')

            return {
              inputs: $inputs,
              labels: $labels,
              text: $text,
              select: $select,
              radiocheck: $radiocheck,
              buttons: $buttons
            }
          }())

/*--------------------------------------------------------------------------*/

      /**
       * @namespace Methods of the form
       * @memberOf $.fn.idealforms
       */
      var Actions = {

        /** Create validation elements and neccesary markup
         * @private
         */
        init: (function () {

          var insertNewEls = function ($field) {
            var error = '<span class="error" />',
                valid = '<i class="icon valid-icon" />',
                invalid = $('<i/>', {
                  'class': 'icon invalid-icon',
                  click: function () {
                    var $this = $(this)
                    if ($this.siblings('label').length) { // radio & check
                      $this.siblings('label:first').find('input').focus()
                    } else {
                      $this.siblings('input, select, textarea').focus()
                    }
                  }
                })
            $(error).hide().insertAfter($field)
            $(valid).add(invalid).hide().appendTo($field)
          }

          $form.css('visibility', 'visible').addClass('ideal-form')
          $form.children('div').addClass('ideal-wrap')

          // Add novalidate tag if HTML5.
          FormInputs.inputs.attr('novalidate', 'novalidate')
          
          // Autocomplete causes some problems...
          FormInputs.inputs.attr('autocomplete', 'off')

          // Labels
          FormInputs.labels
            .addClass('ideal-label')
            .width(Utils.getMaxWidth(FormInputs.labels))

          // Text inputs & select
          FormInputs.text.add(FormInputs.select).each(function () {
            var $this = $(this)
            $this.wrapAll('<span class="ideal-field"/>')
            insertNewEls($this.parent())
          })

          // Radio & Checkbox
          FormInputs.radiocheck
            .parent()
            .filter(':last-child')
            .children()
            .each(function () {
              $(this).parent()
                .siblings('label:not(.ideal-label)').andSelf()
                .wrapAll('<span class="ideal-field ideal-radiocheck"/>')
            })
          insertNewEls(FormInputs.radiocheck.parents('.ideal-field'))

          // Custom inputs
          if (o.customInputs) {
            FormInputs.buttons.addClass('ideal-button')
            FormInputs.select.addClass('custom').toCustomSelect()
            FormInputs.radiocheck.addClass('custom').toCustomRadioCheck()
          }

          // Placeholder support
          if (!('placeholder' in $('<input/>')[0])) {
            FormInputs.text.each(function () {
              $(this).val($(this).attr('placeholder'))
            }).on({
              focus: function () {
                if (this.value === $(this).attr('placeholder')) $(this).val('')
              },
              blur: function () {
                $(this).val() || $(this).val($(this).attr('placeholder'))
              }
            })
          }
        }()),

        /** Validates an input
         * @memberOf Actions
         * @param {object} input Object that contains the jQuery input object [input.input]
         * and the user options of that input [input.userOptions]
         * @param {string} value The value of the given input
         * @returns {object} Returns [isValid] plus [error] if it fails
         */
        validate: function (input, value) {
          var isValid = true,
              error = '',
              userOptions = input.userOptions,
              userFilters

          if (userOptions.filters) {
            userFilters = userOptions.filters
            if (!value && /required/.test(userFilters)) {
              if (userOptions.errors && userOptions.errors.required) {
                error = userOptions.errors.required
              } else {
                error = 'ここは必須項目です。'
              }
              isValid = false
            }
            if (value) {
              userFilters = userFilters.split(/\s/)
              $.each(userFilters, function (i, uf) {
                var theFilter = Filters[uf]
                if (theFilter) {
                  if (
                    typeof theFilter.regex === 'function' && !theFilter.regex(input, value) ||
                    theFilter.regex instanceof RegExp && !theFilter.regex.test(value)
                  ) {
                    isValid = false
                    error = (userOptions.errors && userOptions.errors[uf]) || theFilter.error
                    return false
                  }
                }
              })
            }
          } else {
            isValid = true
          }
          return {
            isValid: isValid,
            error: error
          }
        },

        /** Shows or hides validation errors
         * @memberOf Actions
         * @param {object} input jQuery object
         * @param {string} evt The event on which `analyze()` is being called
         */
        analyze: function (input, evt) {

          var $input = FormInputs.inputs.filter('[name="' + input.attr('name') + '"]'),
              userOptions = o.inputs[input.attr('name')] || '',
              value = (function () {
                var iVal = input.val()
                if (iVal === input.attr('placeholder')) {
                  return
                }
                // IE8 and IE9 fix empty value bug
                if (input.is(':checkbox, :radio')) {
                  return userOptions && ' '
                }
                return iVal
              }())

          // Validate
          var test = Actions.validate({
            input: $input,
            userOptions: userOptions
          }, value)

          /**
           * @namespace Validation elements
           */
          var $field = input.parents('.ideal-field'),
              $error = $field.next('.error'),
              $invalid = (function () {
                if ($input.is(':checkbox, :radio')) {
                  return input.parent().siblings('.invalid-icon')
                }
                return input.siblings('.invalid-icon')
              }()),
              $valid = (function () {
                if ($input.is(':checkbox, :radio')) {
                  return input.parent().siblings('.valid-icon')
                }
                return input.siblings('.valid-icon')
              }())

          // Reset
          $field.removeClass('valid invalid')
          $error.add($invalid).add($valid).hide()

          // Validates
          if (value && test.isValid) {
            $error.add($invalid).hide()
            $field.addClass('valid')
            $valid.show()
          }
          // Does NOT validate
          if (!test.isValid) {
            $invalid.show()
            $field.addClass('invalid')
            // hide error on blur
            if (evt !== 'blur') $error.html(test.error).show()
          }
        },

        /** Deals with responsiveness aka adaptation
         * @memberOf Actions
         */
        responsive: function () {

          var maxWidth = LessVars.fieldWidth + FormInputs.labels.outerWidth()

          if (o.responsiveAt === 'auto') {
            $form.width() < maxWidth
              ? $form.addClass('stack')
              : $form.removeClass('stack')
          } else {
            $(window).width() < o.responsiveAt
              ? $form.addClass('stack')
              : $form.removeClass('stack')
          }

          // Labels
          var $emptyLabel = FormInputs.labels.filter(function () {
            return $(this).html() === '&nbsp;'
          })
          $form.is('.stack') ? $emptyLabel.hide() : $emptyLabel.show()

          // Custom select
          var $customSelect = FormInputs.select.next('.ideal-select')
          $form.is('.stack')
            ? $customSelect.trigger('list')
            : $customSelect.trigger('menu')
        }
      }

/*--------------------------------------------------------------------------*/

      /** Attach events to the form **/

      FormInputs.inputs
        .on('keyup change focus blur', function (e) {
          Actions.analyze($(this), e.type)
        })
        .blur() // Start fresh

      $form.submit(function (e) {
        if ($form.find('.ideal-field.invalid').length) {
          e.preventDefault()
          o.onFail()
        } else {
          o.onSuccess()
        }
      })

      // Responsive  
      if (o.responsiveAt) {
        $(window).resize(function () {
          Actions.responsive()
        })
        Actions.responsive()
      }

      return this

    }
}(jQuery))
          
          var $form = $('#my-form');

  $form.idealforms({
    inputs: {
      'username': {
        filters: 'required username exclude',
        data: {
          exclude: ['Paul', 'Mike']
        }
      },
      'pass': {
        filters: 'required pass',
      },
      'email': {
        filters: 'email'
      },
      'date': {
        filters: 'date'
      },
      'comments': {
        filters: 'min max',
        data: {
          min: 50,
          max: 200
        }
      },
      'states': {
        filters: 'exclude',
        data: {
          exclude: ['選択して下さい']
        },
        errors: {
          exclude: '選択して下さい'
        }
      },
      'langs[]': {
        filters: 'min',
        data: {
          min: 2
        },
        errors: {
          min: '<strong>2つ以上</strong>選択して下さい'
        }
      }
    }
  });
  
  $form.find('input:first').focus();    
  
body {
    background:url("data:image/png;base64,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");
    font: normal 15px/1.7 "Droid Sans", sans-serif;
    color: #222;
}
h1, h2, h3 {
    margin: 0;
    padding: 0;
    margin-bottom: .5em;
    line-height: 1;
}
h1 {
    font-size: 38px;
}
p {
    margin: .5em 0 1em 0;
}
ul {
    margin: 0;
    padding: 0 1em;
}
li {
    margin: .5em 0;
}
a:link,
a:visited {
    color: #2680BF;
    text-decoration: none;
    border-bottom: 1px solid #2680BF;
    font-weight: bold;
}

header {
    padding: 15px 0;
    margin-bottom: 60px;
    background: #285E85;
}
footer {
    padding: 40px 0;
    margin-top: 60px;
    background: #333;
    color: white;
    box-shadow: inset 1px 0 5px rgba(0,0,0,.85);
}
footer a:link,
footer a:visited {
    color: white;
    border-color: white;
}
#fork {
    float: right;
    margin: 0;
}
#copy {
    display: inline-block;
    margin: 0;
}
#title {
    color: white;
    font-size: 18px;
    display: inline-block;
    margin: 0;
    line-height: 34px;
}
#calltoaction {
    float: right;
    margin: 0 2em;
    line-height: 34px;
    color: white;
}
#download {
    float: right;
    background: white;
    padding: .3em 1.6em;
    color: #285E85;
    box-shadow: 0 0 5px rgba(0,0,0,.5);
    border-radius: 2px;
}
#download:active {
    position: relative;
    top: 1px;
    box-shadow: none;
}
.mycol {
    padding-top: 14px;
}
#my-form {
    border: 1px solid #ccc;
    padding: 3em;
    border-radius: 2px;
    box-shadow: 0 0 2px rgba(0,0,0,.2);
}
#comments {
    width: 350px;
    height: 100px;
}
  <div class="sevencol last">
    <form id="my-form">
      <div><label>名前:</label><input name="username" type="text"/></div>
      <div><label>パスワード:</label><input name="pass" type="password"/></div>
      <div><label>メール:</label><input name="email" type="text"/></div>
      <div><label>誕生日:</label><input name="date" type="text" placeholder="mm/dd/yy"/></div>
      <div>
        <label>言語:</label>
        <label><input type="checkbox" name="langs[]" value="japanese"/>日本語</label>
        <label><input type="checkbox" name="langs[]" value="English"/>英語</label>
        <label><input type="checkbox" name="langs[]" value="Chinese"/>中国語</label>
        <label><input type="checkbox" name="langs[]" value="Spanish"/>スペイン語</label>
        <label><input type="checkbox" name="langs[]" value="French"/>フランス語</label>
        <label><input type="checkbox" name="langs[]" value="German"/>ドイツ語</label>
        <label><input type="checkbox" name="langs[]" value="Korean"/>韓国語</label>
      </div>
      <div><label>ラジオボタン:</label>
        <label><input type="radio" name="radio"/>りんご</label>
        <label><input type="radio" name="radio"/>バナナ</label>
        <label><input type="radio" name="radio"/>ぶどう</label>
      </div>
      <div><label>都道府県:</label>
      <select name="states">
        <option value="選択して下さい">選択して下さい</option> 
        <option value="東京">東京</option> 
        <option value="福岡">福岡</option> 
        <option value="京都">京都</option> 
        <option value="大阪">大阪</option> 
        <option value="福島">福島</option> 
        <option value="広島">広島</option> 
        <option value="北海道">北海道</option> 
        <option value="山形">山形</option> 
        <option value="新潟">新潟</option> 
        <option value="京都">京都</option> 
        <option value="三重">三重</option> 
        <option value="富山">富山</option> 
      </select></div>
      <div><label>コメント:</label><textarea id="comments" name="comments"></textarea></div>
      <div><label>&nbsp;</label><button type="submit">送信</button></div>
      <div style="clear: both;"></div>
    </form>
  </div>