我正在尝试使用 jQuery 制作名称字段过滤器,并且尝试了很多正则表达式,但没有一个可以完全正常工作。
我所需要的只是将名称字段设置为名称字段 - 仅此而已,例如 Adam Jeremy Smith。所以不可能输入 $ 或 / 或 _ 或 ~ 或 0-9 或其他任何东西?这该怎么做?
我认为应该是:
/[^\\p{L}]+([^0-9])+$/
是的,它只有在你输入“Adam Je4”时才有效,但如果你继续写“Adam Je4remy”,它就不起作用并且验证不正确?
如何实现?
如果您将 name 定义为something that consists of 1 or more words, separated by spaces, where each word consists of one or more letters, and starts with uppercase
,它的写法类似于...
/^[A-Z][a-z]+(\s+[A-Z][a-z]+)*$/
但它实际上要复杂得多,看 - 它不仅仅是关于字母(\p{L}
在你的例子中;顺便说一句,JS 不支持属性 unicode 类,你必须使用插件(例如这个)来实现这样的功能)。
例如,你会允许在你的名字中使用撇号吗?如果是这样,如何使用它们(可能没有名字有两个撇号接近,像这样 - I''van Ivanov
?连字符呢?不同的大写规则呢:例如,你会认为brian d foy是一个真实的名字吗?等等......
关键是您必须平衡您实际期望看到的内容与您的正则表达式的复杂性。
严格限制这样的名称格式是不好的做法,因为它没有考虑到各种情况——名字中带有撇号和破折号的人,来自欧洲/亚洲国家的人使用额外的字符,等等。
有关更多信息,请参阅本文:http ://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/
答案是:/^[Az\s]+$/