我的正则表达式应该只接受基于拉丁文的字符,但它的行为却很奇怪
My regex that should only accept latin-based characters is acting strangely
我已经尽我所能编写了一个正则表达式,它只允许拉丁字符集带有'-'选项,如果包含该选项,则必须后跟至少一个其他拉丁字符。
我的RegEx:
['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+(?:[-]?['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+)
我是在阅读了几篇帖子并重读了手册后才想到这一点的,以找出解决这一问题的最佳方法。此检查附加到一个文本字段,用户在该字段中只键入自己的名字,然后提交。
它还可以,但肯定还有改进的空间。
示例:
Tom // passes
Éve // passes
John-Paul // passes
2pac // passes and removes numbers (not really what I want)
John316 // passes and removes numbers (not really what I want)
我真正希望发生的是最后两次检查失败
我该如何修改它以获得我想要的结果?
您需要通过在开头添加^
和在结尾添加$
来锚定正则表达式。这样,您就不会让任何其他符号出现在输入字符串中。
我还建议通过将?
从连字符后移动到末尾来增强模式(这将使正则表达式的执行线性化,因为连字符没有量词,并且是必需的,因此限制了回溯):
^['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+(?:-['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+)?$
请参阅regex演示。
JS代码段:
console.log(/^['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+(?:-['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+)?$/.test('Éve')); //=> true
console.log(/^['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+(?:-['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+)?$/.test('John-Paul')); // => true
console.log(/^['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+(?:-['u00BF-'u1FFF'u2C00-'uD7FFA-Za-z]+)?$/.test('John316')); // => false
相关文章:
- 我的 base64 连接字符串有 = 字符.如何摆脱它们
- 为什么我的捕获括号之外的字符包含在我的正则表达式的匹配项中
- 转义我的 HTML 字符
- 为什么不'我的javascript函数允许点,但允许连字符
- 如何消除我的应用程序上的希腊字符
- 如何让我的代码检查它是否包含所有指定的字符
- 我什么时候需要转义正则表达式字符集中的字符(在 [] 内)
- 为什么我的正则表达式中缺少一个字符
- 通过 GET 传递带有新行的文本字符串会破坏我的重定向
- encodeURIComponent 似乎在我的字符串中添加了一个字符
- 为什么“ 新字符串('我的字符串');“ 返回一个对象?但是“ 字符串(”我的字符串“);“返回一个字符
- 我怎么能在每个特定的字符中插入一个字符,比如“”;(“在我的javascript中
- 为什么我可以't使用JQuery更新输入标签的值,并在其中放入€字符?我获得â¬字符串而不是欧
- PHP在我的输出中放置了一些奇怪的字符
- 传入密钥会导致我的 Firebase 网址中出现额外的字符,如何删除它们
- 为什么我的特殊字符'>>'被带问号的钻石所取代
- 为什么取消转义字符串会弄乱我的正则表达式
- 我的正则表达式应该只接受基于拉丁文的字符,但它的行为却很奇怪
- 如果尖括号是我的URL中唯一未编码的特殊字符,这本身就很危险吗
- 如何获取已删除的字符并在文本区域内更新我的字符串