0

我以前没有做过,我需要创建一个 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,后面的数字是可能有-内部组织的名称。

我该如何处理它以允许两个可能的条目?

对于正则表达式和/或资源的任何帮助将不胜感激!

4

2 回答 2

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 ...

或使用正则表达式

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 
于 2013-06-07T20:02:05.653 回答
1

两种解决方案:

  1. 第一个设计用于.test返回真或假。

    var orgIdCheck = /\d+\s*-\s*[-\w\s]+\w/;
    var validId = orgIdCheck.test(*possible org ID string*);
    if (validId) {} /* do something */
    else {} /* do something else */
    
  2. 第二个旨在返回一个包含数字 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 和名称,因此您应该在使用第二个正则表达式之前使用第一个正则表达式进行验证。(如果您不事先验证 org ID 字符串,第二个可能会返回奇怪的东西。)

根据您对错误输入的偏执程度,您可以在orgIdCheck表达式之前和之后(在/and内/)放置一个插入符号 ^ 和美元符号 $。但是你可能会因为额外的空格而最终得到一些有效输入的错误。

于 2013-06-07T22:09:33.353 回答