正则表达式来测试整个单词

时间:2010-07-19 16:06:55

标签: regex

我有这个表达式([a-zA-Z]|ñ|Ñ)*我想用它来阻止所有字符,但字母和Ñ要输入文本框。 问题是返回匹配:A9023但也是32“”“。如何返回A9023的匹配但不是32”“”。 感谢。

3 个答案:

答案 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与之相反。)