butallmj
butallmj

Reputation: 1549

VXML Digits Grammar Excluding All Zeros

I'm looking for a way to build a VXML grammar that requires a certain number of digits to be entered, but also requires that the input is not all zeros.

The use case for this is bank numbers. For example, I would like to force an input (voice or DTMF, doesn't matter) of 9 digits for routing numbers but require that not all digits are zero. (Disregard the modulus check for the moment, I'm not concerned about that here).

Given the grammar constructs of <one-of> and <item>, I can see this being possible by enumerating all possibilities such as the rule at this end of this question. However, this seems ridiculous. Is there a better way that I haven't come across yet? Any help would be appreciated.

<rule>
    <one-of>
        <item>
            <item repeat="1">
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
            </item>
            <item repeat="8">
                <item>0</item>
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
            </item>
        </item>
        <item>
            <item repeat="1">
                <item>0</item>
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
            </item>
            <item repeat="1">
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
            </item>
            <item repeat="7">
                <item>0</item>
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
            </item>
        </item>
        <item>
            <item repeat="2">
                <item>0</item>
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
            </item>
            <item repeat="1">
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
            </item>
            <item repeat="6">
                <item>0</item>
                <item>1</item>
                <item>2</item>
                <item>3</item>
                <item>4</item>
                <item>5</item>
                <item>6</item>
                <item>7</item>
                <item>8</item>
                <item>9</item>
            </item>
        </item>
                    etc....
    </one-of>
</rule>

Upvotes: 1

Views: 466

Answers (1)

Kevin Junghans
Kevin Junghans

Reputation: 17540

How about something like this

<rule id="zero">
  <oneof>
    <item>0</item>
  </oneof>
</rule>

<rule id="nonzero">
  <oneof>
    <item>1</item>
    <item>2</item>
    <item>3</item>
    <item>4</item>
    <item>5</item>
    <item>6</item>
    <item>7</item>
    <item>8</item>
    <item>9</item>
  </oneof>
</rule>

<rule id="alldigits">
  <oneof>
    <item>
      <ruleref uri="#zero"/>
    </item>
    <item>
      <ruleref uri="#nonzero"/>
    </item>
  </oneof>
</rule>

<rule id="account-num">
  <oneof>
    <item>
      <item repeat="7">
       <ruleref uri="#alldigits"/>
      </item>
      <item repeat="1">
         <ruleref uri="#nonzero"/>
      </item>
    </item>
  </oneof>
</rule>

The rule account-num specifies that at least one number must not be zero.

Upvotes: 1

Related Questions