正则表达式:并非所有空白,但允许某些字符,有限制

问题描述 投票:0回答:1

[尝试给出一个正则表达式或正则表达式的组合,如果a)他们仅输入了空白或b)输入了“非合法”字符,则返回False。最后,字符数有设定的限制。

我到目前为止最接近的是下面的。失败之处在于它不计算任何前导空格;仅计算非空白,因此失败。使用js。

const reg = /^(**[ ]***[!-~\u2018-\u201d\u2013\u2014]){1,10}$/;

EDIT:我认为以上是不正确的,我打算发布此内容:

const re4 = /^(?!\s*$)[!-~\u2018-\u201d\u2013\u2014]{1,10}$/;

编辑2:杂乱无章;留出空间和所有其他“标准”键盘字符:

const re5 = / ^(?!\ s * $)[!-〜] {1,10} $ /;

因此,这表示您可以输入一堆空格,并且必须在下面的列表中至少包含一个其他字符;但是{1,10}仅计入非空格,因此我最终可能会得到太多总数。

regex whitespace
1个回答
0
投票

我知道您想通过正则表达式施加长度限制。我建议不要这样做,建议改用str.length

此正则表达式将匹配仅空白字符串和包含一个或多个错误字符的字符串:

const re4 = /(^\s+$|[\!-\~\u2018-\u201d\u2013\u2014])/;

关于禁止所有空格字符串:您可以考虑使用更明确的内容,例如if (s.trim().length == 0),而不是将其打包到正则表达式中。 IMO可以使您的意图更清晰,代码更容易阅读,让您拥有易于阅读的正则表达式:

const re4 = /[\!-\~\u2018-\u201d\u2013\u2014])/;

如果将trim用于全空白检查,则即使有长度限制,也可以将正则表达式转换为肯定断言:

# matches any string consisting of 1-10 characters not considered *bad*
const re4 = /^[^\!-\~\u2018-\u201d\u2013\u2014]{1,10}$/;
© www.soinside.com 2019 - 2024. All rights reserved.