访问VBA正则表达式:输入掩码验证。检查字符串是否仅包含重复模式

时间:2017-03-08 10:44:14

标签: regex vba access-vba

我试图限制用户在Access的表单字段中输入错误的字符串。

我正在尝试确定string的形式是" 1,2,54,765,43222"。 序列是

  1. 严格正整数
  2. 逗号
  3. 空格(␣)
  4. 并且该序列可以重复未知次数。

    我已经尝试将String Like函数与"#, #"一起使用,但是如何让这种模式可能重复出现在我的脑海中。

    我也对Regex模式持开放态度,尽管我对这方面的知识和理解非常有限。我尝试使用模式"\d+, +""(\d+, )+",但我不相信这是正确的。

    另一个解决方案可能是使用substring并在提供的字符串的前三个字符中搜索单个出现的模式,修剪字符串以删除前三个字符并重复此操作。

    给你一些例子:

    • " 1,2,3,4"应该返回true
    • " 1,2,3,4"应该返回false
    • " a,3,65!,34"应该返回false
    • " 1,3,2,4,5442"应该返回true

    我希望我的描述足够。

    提前致谢。

2 个答案:

答案 0 :(得分:3)

我有简单的解决方案:

1)首先,拆分整个字符串:

numberArray = Split(YourSequence, ", ")

现在,numberArray应该只包含整数,如果字符串是正确的,

2)其次,你在循环中迭代numberArray并检查是否可以使用IsNumeric函数将特定元素转换为数字,如果任何元素无法转换,那么你的答案是{ {1}}你可以退出循环。

代码很简单,不需要任何正则表达式。

答案 1 :(得分:1)

\d+, +(\d+, )+模式不合适,因为他们会找到部分匹配("22, "中的abc 22, end)和第二个 - 即使您通过添加锚点^$来修复上一个问题,仍然需要, +字符串末尾的单个空格。

您需要使用

^\d+(?:, \d+)*$

请参阅regex demo

如果至少需要1个逗号,请将*量词替换为+,以匹配分组子模式的1个或多个匹配项。

<强>详情:

  • ^ - 字符串的开头
  • \d+ - 一位或多位
  • (?:, \d+)* - 0+序列
    • , - 逗号
    • - space
    • \d+ - 一位或多位
  • $ - 字符串结尾