【问题标题】:Regex for alphanumeric and single spaces字母数字和单个空格的正则表达式
【发布时间】:2019-03-11 06:59:17
【问题描述】:

如何在字母+数字单词之间允许单个空格?

我使用的正则表达式是"^(?![0-9]*$)[a-zA-Z0-9]+$"

  1. 不允许开头的数字
  2. 允许在一个或多个字母字符后使用字母和数字

例子:

允许

  • Google,
  • Car 401,目前不允许!
  • Car401

禁止

  • 012 Avenue,
  • Central Park,
  • 34134

测试:https://regex101.com/r/StK21o/2/

【问题讨论】:

  • 你能给出一两个你试图匹配的字符串的例子吗?从你的问题看不太清楚。
  • @skwidbreth:更新

标签: regex


【解决方案1】:

您可以使用此正则表达式,它使用否定前瞻来丢弃以数字开头的字符串,否则捕获只能用一个空格分隔的文本,

^(?!\d)[a-zA-Z\d]+(?: [a-zA-Z\d]+)*$

正则表达式解释:

  • ^ - 字符串开始
  • (?!\d) - 如果字符串以数字开头,则拒绝匹配
  • [a-zA-Z\d]+ - 捕获一个或多个字母数字字符
  • (?: [a-zA-Z\d]+)* - 进一步捕获零个或多个单空格分隔的字母数字字符
  • $ - 字符串结束

Demo

【讨论】:

  • 嗨,“我是 1234”失败了
  • @IncharaRaveendra:它适用于“我是 1234”。检查this 它适用于所有情况。它不允许在开头和结尾都留有空格。
  • @Downvoter:我的解决方案似乎在任何情况下都没有失败,那么为什么要投反对票呢?给我看一个不起作用的案例?
  • 我不确定为什么 Angular 不允许“\d”。但是,我使用了 "^(?![0-9])[a-zA-Z0-9]+(?: [a-zA-Z0-9]+)*$" 谢谢!
  • @IncharaRaveendra:可能是您的 Angular 版本不支持 \d,在这种情况下使用 [0-9] 有效。好在终于奏效了。
【解决方案2】:

这个表达式应该可以。

^[a-zA-Z][a-zA-Z0-9]*(?:\ [a-zA-Z0-9]+)?$

规则

  1. 第一个字符必须以字母开头
  2. 从第二个字符开始允许使用字母数字字符
  3. 字符串中的1个可选空格(不以空格结尾也不以空格开头)

表达式解释

  • ^ 表示字符串的开头
  • [a-zA-Z] 匹配一个字母
  • [a-zA-Z0-9] 匹配零个或多个字母数字字符
  • (?:\ [a-zA-Z0-9]+)? 允许以空格开头的可选字符串组,后跟至少 1 个字母数字字符
  • $ 表示字符串结束

https://regex101.com/r/3IHN6j/4

【讨论】:

  • 您好,建议的正则表达式允许在开头有一个空格,并将输入限制为两个单词。
  • 我正要问前导空格。
  • @skwidbreth : 前导空格被处理,但在这种情况下不允许超过 2 个单词。
  • @IncharaRaveendra 刚刚更新了答案。我不确定这是否是您想要的,因为我假设不是第一个字符必须以 0-9 以外的任何字符开头,而是让第一个字符以字母开头。
猜你喜欢
  • 1970-01-01
  • 2012-09-12
  • 2010-09-15
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多