你能给我一个正常的表达吗
有效 - “123-Abc test1”,“test-m e”,“abc slkh-hsds”
无效 - “abc”,“ - hsdj sdsd hjds-”
感谢您帮助我。非常感谢您的帮助
答案 0 :(得分:3)
/^([a-zA-Z0-9] ?)+-( ?[a-zA-Z0-9])+$/
请在此处查看demo。
修改强>
如果连字符的两个侧面都没有空格,那么还需要更多:
/^([a-zA-Z0-9] ?)+-(((?<! -) )?[a-zA-Z0-9])+$/
^^^^^^^^ ^
或者,如果不支持负面的lookbehind断言(例如在JavaScript中),那么等效的正则表达式:
/^([a-zA-Z0-9]( (?!- ))?)+-( ?[a-zA-Z0-9])+$/
^ ^^^^^^^ ^
答案 1 :(得分:2)
只包含字母数字(包括连字符和空格,否则没有意义):
^[\da-zA-Z -]+$
这是匹配字符串的主要部分,并确保每个字符都在给定的集合中。即数字和ASCII字母以及空格和连字符(以下部分将限制其使用)。
字符串的开头或结尾只有一个连字符和无:
(?=^[^-]+-[^-]+$)
这是一个先行断言,确保字符串以至少一个非连字符开头和结尾。中间需要一个连字符。
开头或结尾没有空格或字符串:
(?=^[^ ].*[^ ]$)
再次前瞻,类似于上面的那个。它们可以组合成一个,但看起来更麻烦,更难以解释。
没有连续的空格(上面已经排除了连续的连字符):
(?!.* )
全部放在一起:
(?!.* )(?=^[^ ].*[^ ]$)(?=^[^-]+-[^-]+$)^[\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
答案 2 :(得分:1)
使用此正则表达式:
^(.+-.+)[\da-zA-Z]+[\da-zA-Z ]*[\da-zA-Z]+$