为什么这个正则表达式模式没有传入exec方法?

时间:2017-10-10 04:13:18

标签: javascript regex

我刷卡,我正在创建一个现场Kioske,需要在刷卡后预先填写信用卡表格。我不确定为什么它不识别任何卡片。以下是滑动示例:

%B5500005555555559"TORRANCEJACK G P        "2009206000000000000326000000

有人可以解释为什么它没有传递以下正则表达式模式exec吗?

// MasterCard starts with 51-55, and is 16 digits long.
var pattern = new RegExp("^%B(5[1-5][0-9]{14})\\^([A-Z ]+)/([A-Z ]+)\\^([0-9]{2})([0-9]{2})");
var match = pattern.exec(rawData);

谢谢!

2 个答案:

答案 0 :(得分:0)

从这里找到它Here

^(?:5[1-5][0-9]\d{1}|222[1-9]|2[3-6][0-9]\d{1}|27[01][0-9]|2‌​720)([\ \-]?)\d{4}\1\d{4}\1\d{4}$

不确定您的正则表达式是否正常工作,但在斜杠/

上对我说错误

Regex Tester这个正在运行的

中测试这个正则表达式

我也从here

找到了有用的东西

如果你需要真正的程序来证明有效,我会在你需要的时候为你制作

答案 1 :(得分:0)

我建议您使用以下模式:

/%B(5[1-5][0-9]{14})"([A-Z ]+?)\s+"([0-9]{2})([0-9]{2})/

请参阅regex demo。请注意,您必须对最后([0-9]{2})([0-9]{2})组进行微调,才能将正确的数字输入到必要数量的组中。

JS演示:



var rx = /%B(5[1-5][0-9]{14})"([A-Z ]+?)\s+"([0-9]{2})([0-9]{2})/g;
var s = '%B5500005555555559"TORRANCEJACK G P        "2009201800000000000326000000';
var matches = rx.exec(s);
if (matches) {
 console.log("Number: " + matches[1]); // => number
 console.log("Name: " + matches[2]); // => name
 console.log("Exp. year: " + matches[3]); // => exp year
 console.log("Exp. month: " + matches[4]); // => exp month
}