繁体   English   中英

正则表达式仅在 JavaScript 中存在字母或数值时才接受特殊字符?

[英]Regex to accept special character only in presence of alphabets or numeric value in JavaScript?

我有一个 Javascript 这样的正则表达式:

/^[a-zA-Z0-9 !@#$%^&*()-_-~.+,/\" ]+$/

它允许以下条件:

  1. 只允许字母

  2. 只允许数字

  3. 允许字母和数字的组合

  4. 允许字母、数字和特殊字符的组合

我想修改上面的正则表达式以涵盖以下两种情况:

只允许使用特殊字符

字符串不应以特殊字符开头

所以基本上我的要求是:

string = 'abc' -> Correct
string = '123' -> Correct
string = 'abc123' ->Correct
string = 'abc123!@#' ->Correct
string = 'abc!@#123' -> Correct
string = '123!@#abc' -> Correct

string = '!@#' -> Wrong
string = '!@#abc' -> Wrong
string = '!@#123' -> Wrong
string = '!@#abc123' -> Wrong

有人可以帮我吗?

您可以要求至少一个字母数字:

/^(?=[^a-zA-Z0-9]*[a-zA-Z0-9])[a-zA-Z0-9 !@#$%^&*()_~.+,/\" -]+$/
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

另外,我想你想匹配一个文字- ,所以需要重复它,只是转义,将-_-更改为\-_ ,或者 - 更好 - 移动到字符 class 的末尾。

(?=[^a-zA-Z0-9]*[a-zA-Z0-9])模式是一个正字符 class 需要在除 ASCII 字母或数字以外的任何零个或多个字符之后的 ASCII 数字字母, 紧接在当前位置的右侧,此处,从字符串的开头开始。

只需将[a-zA-Z0-9]添加到正则表达式的开头:

/^[a-zA-Z0-9][a-zA-Z0-9 \^\\\-!@#$%&*()_~.+,/'"]+$/gm

请注意,如果在 class(即[ ... ] )中,有四个特殊字符必须通过在其前面加上反斜杠 ( \ ) 进行转义,以便将其解释为字面含义:

// If within a class (ie [...])
^ \ - ]
// If not within a class
\ ^ $ . * + ? ( ) [ ] { } |

正则表达式101

如果允许所有特殊字符并且您认为下划线_也是一个特殊字符,那么您总是可以像这样简化您的 RegEx:

/^[^\W_].+$/

在此处查看您在 Regex101 上给出的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM