我有一个正则表达式来匹配用户输入的id,其基本格式为[a-zA-z]{2}[\d]{8}
但是踢球者是一个空格,可以放在id中的任何字母或数字之间,所以我的正则表达式看起来像这样< / p>
[A-Za-z]+[\s]*[A-Za-z]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*
这显然是一种憎恶,应该用火杀死,这可以改善吗?
以下所有内容均为有效输入
a b 1 2 2 3 4 5 5 6
ab12345678
ab 12345678
答案 0 :(得分:2)
您的正则表达式不符合您的规范,数字前可以有2个或更多字母吗?超过8位数或8位数或更多?
尝试
([a-zA-Z]\s*){2}(\d\s*){8}
如果每个角色之间只能有一个空格:
([a-zA-Z]\s?){2}(\d\s?){8}
答案 1 :(得分:2)
请不要使用\d
和\s
,除非您确切知道要去哪里......
\d
将匹配09E6 0 BENGALI DIGIT ZERO(0是你的数字:-))。例如,阅读http://msdn.microsoft.com/en-us/library/w1c0s6bb.aspx
\s
将匹配更多类型的奇怪空格(和制表符),而不是开玩笑。我不是在开玩笑。 http://msdn.microsoft.com/en-us/library/t809ektx.aspx
自相矛盾地使用[a-zA-Z]你限制了你的用户...没有àèéìòù,也没有土耳其语ı和İ(第一个是没有点的小写,小写,第二个是i)http://en.wikipedia.org/wiki/Dotted_and_dotless_I的大写版本。
也许您可以使用(\p{L}\p{M}*)
(带括号)而不是[A-Za-z]
(所有字母加上组合标记)。您必须在关闭括号后添加*或+ +。一个表达式是单个字母PLUS其组合标记。
哦......你可以使用其他建议之一作为正则表达式的基础: - )
答案 2 :(得分:0)
[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*[\d]+[\s]*
可以替换为......
\s*(?:\d+\s*){8}
(另外,你可以只写\s
而不是[\s]
和\d
而不是[\d]
- 如果你只指定一个,那么括号是多余的反斜杠字符类。)
编辑由于关于原始正则表达式的哪个部分被替换似乎存在一些混淆,这里是替换后的整个表达式:
[A-Za-z]+\s*[A-Za-z]+\s*(?:\d+\s*){8}
答案 3 :(得分:0)
(?:[A-Za-z]+\s*){2}(?:\d+\s*){8}