你能给我提供一个正则表达式吗?
- 只允许字母数字
- 整个字符串中肯定只有一个连字符
- 字符串前后不允许使用连字符或空格
- 不允许使用连续的空格或连字符。
- hypen 和一个空格可以彼此靠近
有效 - "123-Abc test1","test- m e","abc slkh-hsds"
无效 - "abc", "-hsdj sdsd hjds-"
谢谢你帮助我。非常感谢您的帮助
你能给我提供一个正则表达式吗?
有效 - "123-Abc test1","test- m e","abc slkh-hsds"
无效 - "abc", "-hsdj sdsd hjds-"
谢谢你帮助我。非常感谢您的帮助
/^([a-zA-Z0-9] ?)+-( ?[a-zA-Z0-9])+$/
在此处查看演示。
编辑:
如果连字符的两边不能有空格,则需要多一点:
/^([a-zA-Z0-9] ?)+-(((?<! -) )?[a-zA-Z0-9])+$/
^^^^^^^^ ^
或者,如果不支持否定的后向断言(例如在 JavaScript 中),则使用等效的正则表达式:
/^([a-zA-Z0-9]( (?!- ))?)+-( ?[a-zA-Z0-9])+$/
^ ^^^^^^^ ^
只有字母数字(包括连字符和空格,否则没有意义):
^[\da-zA-Z -]+$
这是匹配字符串并确保每个字符都在给定集中的主要部分。即数字和ASCII字母以及空格和连字符(以下部分限制使用)。
字符串的开头或结尾只有一个连字符且没有:
(?=^[^-]+-[^-]+$)
这是一个先行断言,确保字符串以至少一个非连字符字符开始和结束。中间需要一个连字符。
开头或结尾或字符串中没有空格:
(?=^[^ ].*[^ ]$)
再次向前看,类似于上面的。它们可以合二为一,但看起来更混乱,也更难解释。
没有连续的空格(连续的连字符已经被上面的 2. 排除了):
(?!.* )
把它们放在一起:
(?!.* )(?=^[^ ].*[^ ]$)(?=^[^-]+-[^-]+$)^[\da-zA-Z -]+$
快速 PowerShell 测试:
PS> $re='(?!.* )(?=^[^ ].*[^ ]$)(?=^[^-]+-[^-]+$)^[\da-zA-Z -]+$'
PS> "123-Abc test1","test- m e","abc slkh-hsds"," abc ", " -hsdj sdsd hjds- " -match $re
123-Abc test1
test- m e
abc slkh-hsds
使用这个正则表达式:
^(.+-.+)[\da-zA-Z]+[\da-zA-Z ]*[\da-zA-Z]+$