1

你能给我提供一个正则表达式吗?

  • 只允许字母数字
  • 整个字符串中肯定只有一个连字符
  • 字符串前后不允许使用连字符或空格
  • 不允许使用连续的空格或连字符。
  • hypen 和一个空格可以彼此靠近

有效 - "123-Abc test1","test- m e","abc slkh-hsds"
无效 - "abc", "-hsdj sdsd hjds-"

谢谢你帮助我。非常感谢您的帮助

4

3 回答 3

3
/^([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])+$/
              ^ ^^^^^^^ ^
于 2012-08-02T18:28:06.393 回答
2
  1. 只有字母数字(包括连字符和空格,否则没有意义):

    ^[\da-zA-Z -]+$
    

    这是匹配字符串并确保每个字符都在给定集中的主要部分。即数字和ASCII字母以及空格和连字符(以下部分限制使用)。

  2. 字符串的开头或结尾只有一个连字符且没有:

    (?=^[^-]+-[^-]+$)
    

    这是一个先行断言,确保字符串以至少一个非连字符字符开始和结束。中间需要一个连字符。

  3. 开头或结尾或字符串中没有空格:

    (?=^[^ ].*[^ ]$)
    

    再次向前看,类似于上面的。它们可以合二为一,但看起来更混乱,也更难解释。

  4. 没有连续的空格(连续的连字符已经被上面的 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
于 2012-08-02T18:32:52.197 回答
1

使用这个正则表达式:

^(.+-.+)[\da-zA-Z]+[\da-zA-Z ]*[\da-zA-Z]+$
于 2012-08-02T18:25:13.250 回答