我有这个表达式([a-zA-Z]|ñ|Ñ)*
我想用它来阻止所有字符,但字母和Ñ要输入文本框。
问题是返回匹配:A9023但也是32“”“。如何返回A9023的匹配但不是32”“”。
感谢。
答案 0 :(得分:5)
您需要为字符串的开头和结尾添加断言:
^([a-zA-Z]|ñ|Ñ)*$
否则正则表达式匹配任何位置。此外,您还可以将([a-zA-Z]|ñ|Ñ)*
写为字符类[a-zA-ZñÑ]*
:
^[a-zA-ZñÑ]*$
答案 1 :(得分:0)
当然你并不是指 ^
([a-zA-Z]|ñ|Ñ)*
$
- 你可能会找到你想要的角色但是不排除你不是吗?我提到的表达式将固定到字符串的开始^
和结束$
,以便其他任何内容都不会通过。否则:
123ABC456
...会通过你的比赛,因为它找到了0或更多的字母......虽然还有其他字母。
答案 2 :(得分:0)
你没有说你正在使用哪种正则表达式(哪种编程语言),但你可能想要考虑
^\p{L}*$
如果你的正则表达式支持Unicode属性或
^[^\W\d_]*$
如果没有。
原因:你的正则表达式只允许不重音的字母和Ñ - 是否有一种真正的语言使用后者而没有重音字母?
\p{L}
表示“任何'任何'语言中的任何字母'”,
[^\W\d_]
表示“任何既不是非字母数字,也不是数字或下划线的字符”,这只是说“任何字母”的一种奇特但必要的方式(\w
是速记对于“字母,数字或下划线”,\W
与之相反。)