数字和空格 - 宽松的电话号码正则表达式

7

如何使用正则表达式测试字符串是否仅包含数字和空格?

例如:

  1. 021 123 4567 是有效的
  2. 0211234567 是有效的
  3. 0211 234 567 是有效的

要求比较宽松,但需要满足我的要求。

有什么建议吗?


当然,电话号码也可以用字母表示(如1-800-flowers或联系人等)。 - ryber
@ryber:这是为用户的手机号码(新西兰格式)而设定的。 - Marko
4个回答

12

如果需要以数字开头和结尾,那么/^\d[\d ]*\d$/是可行的。而/^[\d ]+$/呢?


这对我来说无论使用什么数字都失败了。我在这里使用“012 323 2313”进行测试http://www.regular-expressions.info/javascriptexample.html - Marko
1
@Marko,如果您使用该测试工具,请不要包含 /。只需输入文本 ^[\d ]+$。 - Aaron D
1
@Marko:你移除了前后的 / 吗?那些只是正则表达式的定界符。尝试使用字符串 ^\d[\d ]*\d$,你会发现它可以很好地匹配 012 323 2313 - CanSpice

5
  • [0-9] <-- 表示0到9之间的任意一位数字
  • [0-9 ] <-- 表示0到9之间的任意一位数字或空格
  • [0-9 ]{1,} <-- 表示0到9之间的任意一位数字或空格,出现1次或更多次
  • [0-9 ]{1,9} <-- 表示0到9之间的任意一位数字或空格,出现1次到9次

4

n个数字,可以有任意数量的空格:

^(\s*\d\s*){11}$

here n=11; Test: here


0

类似于:

\d*|\s+^[A-Za-z]

那不是也允许字母吗? - Marko
@Marko 你可以使用这样的正则表达式测试工具来测试它。 :) http://regexlib.com/RETester.aspx - eandersson
@Fuji,我做了这个(http://www.regular-expressions.info/javascriptexample.html),输入“Asdasd”返回成功。 - Marko
这将始终匹配任何字符串。\d*匹配“零个或多个数字”,而每个字符串都包含零个或多个数字。 - CanSpice
@Marko,看起来这个确实不完美地工作。 :) - eandersson
@Marko,是的。唔,我似乎不能在 Expresso 中强制进行非匹配测试。 - kprobst

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