0

正则表达式的新手。提前致谢!

需要验证的字段是 1-10 大小写混合的字母数字,并且允许使用空格。第一个字符必须是字母数字,而不是空格。

很好的例子:

“拉里金”

“大王1”

“1larryking”

“大号”

不好的例子:

“拉里金”

这就是我所拥有的,只要数据正好是 10 个字符,它就可以工作。问题是它不允许少于 10 个字符。

[0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a-zA-Z][0-9a- zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ][0-9a-zA-Z ]

我已经阅读并尝试了许多不同的东西,但就是不明白。

谢谢,

贾斯汀

4

7 回答 7

1

不知道你用的是什么环境,什么引擎。所以我假设 PCRE(通常用于 PHP)

这个小正则表达式完全符合您的要求:^(?i)(?!\s)[a-z\d ]{1,10}$

这是怎么回事?!

  • 标记字符串的^开始(删除它,如果表达式不能匹配整个字符串)
  • 告诉引擎不(?i)区分大小写,所以后面的表达式中不需要写所有字母的小写和大写
  • 确保以下(?!\s)字符不会是空格\s)(这是所谓的负前瞻)
  • [a-z\d ]{1,10}匹配连续出现的任何字母 ( a-z)、任何数字 ( \d) 和空格 ( ),最少 1 次和最多 10 次出现 ( ){1,10}
  • $末尾的标记字符串的结尾(删除它,如果表达式不能匹配整个字符串 )

这里还有一个小的可视化,以便更好地理解。

正则表达式可视化

调试演示

于 2014-06-24T20:57:03.053 回答
0

我假设最后也不允许空间。

^[a-zA-Z0-9](?:[a-zA-Z0-9 ]{0,8}[a-zA-Z0-9])?$

或使用 posix 字符类:

^[[:alnum:]](?:[[:alnum:] ]{0,8}[[:alnum:]])?$
于 2014-06-24T21:02:02.633 回答
0

尝试这个:[0-9a-zA-Z][0-9a-zA-Z ]{0,9}

{x,y}语法意味着包括介于和x时间y之间。{x,}意味着至少x几次。

于 2014-06-24T20:39:20.123 回答
0

你想要这样的东西。

[a-zA-Z0-9][a-zA-Z0-9 ]{0,9}

第一部分确保它是字母数字的。第二部分用空格获取您的字母数字。{0,9} 允许第二部分出现 0 到 9 次。这会给你的 1-10

于 2014-06-24T20:40:41.623 回答
0

以下可能在语义上是最正确的:

(?=^[0-9a-zA-Z])(?=.*[0-9a-zA-Z]$)^[0-9a-zA-Z ]{1,10}$

它断言第一个和最后一个字符是字母数字,并且整个字符串的长度为 1 到 10 个字符(包括空格)。

于 2014-06-24T20:46:52.153 回答
0

尝试这个:^[(^\s)a-zA-Z0-9][a-z0-9A-Z ]*

第一个字符不是空格和字母数字,然后是零个或多个字母数字字符。它不会限制在 10 个字符,但它适用于任何 1-10 个字符的集合。

于 2014-06-24T20:42:55.393 回答
0

我认为最简单的方法是\w[\s\w]{0,9}

请注意, 如果您不想要,\w[A-Za-z0-9_]替换为[A-Za-z0-9]_\s

于 2014-06-24T20:59:08.297 回答