我正在尝试构建一个正则表达式,以确保给定的字符串只包含这13个特定的字符/规则。我有点麻烦。如有任何帮助,我们将不胜感激。
允许的字符:
- a-z
- A-Z
- 0-9
- !(感叹点(
- -(连字符(
- _(下芯(
- 。(期间(
- *(星号(
- '(单引号(
- ((左括号(
- )(右括号(
- (没有连续空格(
- *。(不能以句点结束(
到目前为止,我有这个
/^[+\-0-9((.!-_*']+$/g
但没有得到预期的结果。提前谢谢。
编辑:抱歉第一次在这里发帖。下面是一些测试用例(JS(。第二个不应该通过,因为它有连续的空格,并且以句点结束。:
let testOne = "Testing Regex - 2021 Th*i)s_On(e_pa!'ss.es.end";
let testTwo ="Testing Regex - 2021 Th*i)s_On(e_pa!'ss.es.end but
shouldn't.";
testOne.match(/^[+-w().!-_*' ]+$/g);
testTwo.match(/^[+-w().!-_*' ]+$/g);
一些问题:
-
您的正则表达式不允许使用拉丁字母:您没有列出它们。
-
正则表达式允许使用一些附加字符(包括
$
、#
和%
(,因为!-*
指定了范围。 -
没有规定不允许超过一个空间。
-
没有规定不允许点作为最后一个字符
-
当字符串结束标记要求匹配始终与整个输入匹配时,
g
修饰符没有什么作用。
从正则表达式中,似乎还要求输入至少有1个字符。
综合来看,我们得到了这个:
/^(?!.*? )(?!.*?.$)[w+-().!*' ]+$/
你可以试试这个:
^(?!.* )[w!()-*'s.]+[w!()-*'s]$
https://regex101.com/r/kTcJUN/3
如果你不想在字符串的末尾使用空格字符,那么:
^(?!.* )[w!()-*'s.]+[w!()-*']$
解释:
(?!.* )
-排除字符串中的双空格
w
-任意单词字符。匹配任何字母、数字或下划线。相当于[a-zA-Z0-9_]。
!
——字面意思是!
(
——字面意思是(
)
-字面意思为)
-
——字面意思为-
*
-字面意思为*
'
——字面意思是'
s
-空间字符
.
-字面意思为.
+
-量词。在一次和无限次之间匹配。
[w!()-*'s]
-允许从列表中选择一个字符。将其放在$
(行尾(之前会使该字符在字符串中最后一个。