首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >允许5-10个字符的正则表达式,但在不计算之间可以有空格。

允许5-10个字符的正则表达式,但在不计算之间可以有空格。
EN

Stack Overflow用户
提问于 2017-01-25 21:31:20
回答 2查看 7.7K关注 0票数 4

问题

构建一个regex语句,该语句允许以下内容:

  1. 最少5个字符
  2. 最多10个字符
  3. 可以包含空格,但空格不增加字符计数。
  4. 任何非空格字符增量字符计数

测试用例:

代码语言:javascript
复制
 expected_to_pass = ['testa', ' test a', 12342, 1.234, 'test a']
 expected_to_fail = [' test', 'test ', ' test ', '     ', 1234, 0.1, '           ','12345678901']

示例regex语句及其用途

允许5-10个非空白字符:

代码语言:javascript
复制
[\S]{5,10}$

允许5-10个字符,而不考虑空格:

代码语言:javascript
复制
[\s\S]{5,10}$

我已经用这个放屁了好几个小时了,我想不出最好的办法来处理这件事。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-25 21:35:02

这个怎么样?

代码语言:javascript
复制
\s*(?:[\w\.]\s*){5,10}+$

或者:

代码语言:javascript
复制
\s*(?:[\w\.]\s*){5,10}$

此外,如果有任何非空白字符出现:

代码语言:javascript
复制
\s*(?:\S\s*){5,10}$

你可以测试它这里

票数 7
EN

Stack Overflow用户

发布于 2017-01-25 22:15:37

在你的问题中有一个错误的假设:\w不匹配所有非空格字符,它匹配单词字符,这意味着字母、数字和下划线。根据设置的语言和标志,这可能包括或排除unicode字母和数字。还有更多的非空间字符,例如.|。为了匹配空间字符,人们通常使用\s,因此\S匹配非空间字符.

可以使用^\s*(?:\s*){5,10}$检查您的需求。如果使用某种完全匹配功能(例如Java .matches()或Python re.fullmatch),您可能可以丢弃锚。

根据您使用的语言,您可能不想使用regex,而是迭代字符串并检查字符。这通常应该比regex快。

伪码:

代码语言:javascript
复制
number of chars = 0
for first character of string to last character of string
  if character is space
     inc number of chars by 1
return true if number of chars between 5 and 10
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41862024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档