正则表达式允许字母数字、空格和一些特殊字符。

4
我有这个^[a-zA-Z0-9 @&$]*$,但在某些情况下不能正常工作。
如果有人输入:
  • 仅由数字组成的字符串(例如1234567
  • 以特殊字符开头的字符串(例如&123abc
需要被拒绝。请注意,特殊字符可以位于中间和结尾。

2
你能列出需要被拒绝的确切条件以及原因吗? - Sriraghavan Subramanian
该模式是否应接受空字符串?如果不接受,请尝试使用/^\b(?=\d*\D)[a-z\d @&$]+$/i。这并不是很清楚(此模式至少需要一个字符)。 - bobble bubble
2个回答

8
您似乎需要避免匹配只由数字组成的字符串,并确保字符串以字母或数字开头。我假设您还需要能够匹配空字符串(原始正则表达式可以匹配空字符串)。
因此,我建议使用以下正则表达式:
^(?!\d+$)(?:[a-zA-Z0-9][a-zA-Z0-9 @&$]*)?$

请参见正则表达式示例 细节说明
  • ^ - 字符串的开头
  • (?!\d+$) - 否定前瞻,如果字符串仅包含数字,则匹配失败
  • (?:[a-zA-Z0-9][a-zA-Z0-9 @&$]*)? - 可选序列:
    • [a-zA-Z0-9] - 数字或字母
    • [a-zA-Z0-9 @&$]* - 0个或多个数字、字母、空格、@&$ 字符
  • $ - 字符串的结尾。

如果我想要排除一些特殊字符并包含另一些特殊字符,我该如何排除一些字符?对于包含的字符,我从你的正则表达式中看到了。 - Sharpeye500
@Sharpeye500:抱歉,您的意思是什么?如果您不想匹配一个字符,请一开始就不要将其添加到字符类中。 - Wiktor Stribiżew
如果在字符之间有一个“.”(句号),目前的正则表达式会接受它。例如,“Test.Work”,如果我需要拒绝“.”,那么该如何在正则表达式中排除它? - Sharpeye500
@Sharpeye500:不确定你的意思 - Wiktor Stribiżew
如果我输入一个单词,例如“Sharpeye500@”,那么它是有效和正确的。如果我输入“Sharpe.Eye500”,其中包含一个点,那么它应该是无效的,但是使用那个正则表达式时,它会说是有效的。我想在单词中有点时将其标记为无效。 - Sharpeye500
@Sharpeye500:我不明白你的意思。一个包含 . 的字符串 不能被匹配 到上述正则表达式中。请提供一个可复现的示例。 - Wiktor Stribiżew

1
您可以使用以下正则表达式来实现。
^(?!\d+$)\w+\S+

检查演示 在这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接