现在,我正在尝试创建具有以下条件的 JavaScript 正则表达式:
- 接受所有 UTF-8 字符
- 单词之间允许有空格,但只能有1个空格,不能有多个。
- 允许所有符号,例如:!#$%^&*()_-={}[] 除了:“@”
- 字符串前后没有尾随空格。
- 范围应为 2-16 个字符,包括空格
- 并且字符串中必须至少包含 2 个字母字符。
这是我目前制定的正则表达式:
/^(?![^@]*@)(?![^]*\s\s)\S[^]{0,14}\S$/
到目前为止,除了不满足最后一个条件(它必须至少包含 2 个字母)之外,它执行了以下所有操作。例如:
"..He"//应该是真的
"He$*"//应该是真的
".."//应该是假的
"*%"//应该是假的
"!#$%^&*()"//应该是假的,因为没有字母
"$$tonyMoney™"//应该是真的
"أنا أحب جاو™"//应该是真的
"To"//应该为真
感谢任何帮助!谢谢!
最佳答案
你可以使用这个基于 XRegExp 的正则表达式:
var rx = XRegExp("^(?![^@]*@)(?![^]*\\s\\s)(?=(?:\\P{L}*\\p{L}){2})\\S[^]{0,14}\\S$");
正则表达式分解:
^
- 字符串开始(?![^@]*@)
- 字符串中没有@
(?![^]*\\s\\s)
- 没有两个连续的空格(?=(?:\\P{L}*\\p{L}){2})
- 至少 2 个 Unicode 字母\\S[^]{0,14}\\S
- 长度为 2 到 16 个符号,字符串的开头和结尾没有空格。$
- 字符串结尾
参见 regex demo
var rx = XRegExp("^(?![^@]*@)(?![^]*\\s\\s)(?=(?:\\P{L}*\\p{L}){2})\\S[\\s\\S]{0,14}\\S$");
document.body.innerHTML = rx.test("..He") + " - must be true<br/>";
document.body.innerHTML += rx.test("He$*") + " - must be true<br/>";
document.body.innerHTML += rx.test("..") + " - must be false<br/>";
document.body.innerHTML += rx.test("*%") + " - must be false<br/>";
document.body.innerHTML += rx.test("!#$%^&*()") + " - must be false<br/>";
document.body.innerHTML += rx.test("$$tonyMoney™") + " - must be true<br/>";
document.body.innerHTML += rx.test("To") + " - must be true<br/>";
document.body.innerHTML += rx.test("أنا أحب جاف™") + " - must be true<br/>";
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-all-min.js"></script>
关于JavaScript 正则表达式 - 必须至少包含 UTF-8 中的任意 2 个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34141921/