Reputation: 1549
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
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