我之前没有做过,我需要创建一个RegEx来验证输入框。 #
代表一个数字,X
代表一个字母。格式为:
11111 - XXXXXXX
或
11111 - XXXXXXX-XXXXXXXX XXXX
输入框具有从数据库中提取的自动完成功能,并返回一个列表,其中包含ID后跟组织名称的游戏。
如:
1234 - Benjamin Franklin ISD
1234134 - Benjamin Franklin ISD - Humanities District
123434 - Benjamin-Franklin ISD
1234441 - Benjamin Franklin ISD Accelerated
基本上,第一个-
之前的数字是ID,后面的任何内容都是可能在其中包含-
的组织的名称。
如何处理它可以允许两种可能的条目?
任何帮助都会非常感谢正则表达式和/或资源!
答案 0 :(得分:4)
你可以使用这种模式:
/^\d+(?: *- *[a-zA-Z0-9 ]+)+$/
使用示例:
var yourString = "1234441 - Benjamin Franklin ISD Accelerated";
var pattern = /^\d+(?: *- *[a-zA-Z0-9 ]+)+$/;
if (pattern.test(yourString))
... true ...
else
... false ...
或使用RegExp
var pattern = new RegExp("^\d+(?: *- *[a-zA-Z0-9 ]+)+$");
if (pattern.test(yourString)) ...
请注意,在使用RegExp构造函数(对象语法)时,必须删除分隔符并将可能的标志作为第二个参数。但是pattern
在两种情况下都是RegExp对象。
说明:
^ begining of the string
\d+ one or more digits
(?: non capturing group
* a space zero or more times
- literal -
* a space zero or more times
[a-zA-Z0-9 ]+ a letter, a digit or a space one or more times
)+ close non capturing group, one or more times
$ end of the string
答案 1 :(得分:1)
两种解决方案:
第一个设计用于使用.test
返回true或false。
var orgIdCheck = /\d+\s*-\s*[-\w\s]+\w/;
var validId = orgIdCheck.test(*possible org ID string*);
if (validId) {} /* do something */
else {} /* do something else */
第二个用于返回包含数字ID和组织名称的双元素数组
var orgIdComponents = /(\d+)|(\w[-\w\s]*\w)/g;
var idParts = *validated org ID string*.match(orgIdComponents);
/* idParts[0] will be the numeric ID, and idParts[1] the name */
请注意,第二个正则表达式不会检查以确保该字符串同时包含数字ID和名称,因此您应该在使用第二个正则表达式之前使用第一个正则表达式进行验证。 (如果你事先没有验证组织ID字符串,第二个可以返回奇怪的东西。)
根据您对输入错误的偏执程度,您可以在orgIdCheck
表达式之前和之后(/
和/
内)放置一个插入符号^和美元符号$。但是,由于额外的空格,你可能最终会因某些有效输入而变错。