操纵字符串以匹配验证模式

时间:2011-03-07 13:55:53

标签: jquery web-services validation

我有一个验证WCF Web服务,允许我验证字符串,邮政编码,电子邮件等。它运行良好,返回JSON响应。然而,我渴望做的是:

  1. 让用户填写带有条目的文本框;
  2. 使用WCF服务验证响应;
  3. 向用户显示验证已通过或失败的视觉提示; (到目前为止,我可以使用Jquery和我的WCF服务完成所有这些)
  4. 更改文本框模式以匹配接受的模式。例如,如果我输入了一个电话号码:01234 567890,它会改变,(就像在iPhone上一样)到我定义的+44(0)1234 567890模式。我希望这发生在内联,直播,所以我知道这个也许某种形式的Jquery工作 - 任何想法?
  5. 帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

困难的是没有在jquery中实现这个,而是找到一个执行格式化的算法。

您需要将部分输入与所需模式的部分匹配。也许如果你从后面开始,你可以为实际的电话号码部分分配号码,并在必要时包括空格;然后当你带着缺失的()来到前面时,当你到达0时你会注意到你错过了一个右括号,所以你可以插入它。当您阅读输入结束但期望开括号时,右括号相同。 。现在你没有输入,但你仍然拥有所需模式的国际+44,所以你只是假设用户忘记添加它并为他添加。

对于电话号码,这似乎是一种简单的方法,因为当你遗漏某些东西时,它总是在开头(国际代码或区号)。

更一般地说,只要实际输入只有一个解释(如果输入的字符可能是一个子表达式的一部分或另一个,那么你在实际输入中匹配所需格式的子表达式将起作用)在将输入扩展为所需格式时,我们必须向用户解释为什么你的算法有时会做出“错误”的事情。

匹配子表达式可以使用javascript中的正则表达式完成,因此您不必编写自己的表达式匹配器。使用子表达式分组,然后使用字符串连接将匹配的组连接在一起,根据需要在匹配的组之间插入格式化字符。

以下是我的意思的一个小例子:

function format_phonenumber(unformatted) {
  var regex = /(\d{3})(\s*-?\s*)(\d{3})\s*(\d{4})/gi;
  var m = regex.exec(unformatted)
  return m[1] + "-" + m[3] + " " + m[4]; 
}

/* unformatted junk */
var junk = "5551234567";
alert("Formatted: " + format_phonenumber(junk));

您可以将垃圾更改为“555 1234567”或555-1234567“等,匹配组仍将匹配正确的子表达式并生成格式良好的输出”555-123 4567“(我不知道您的格式如何你的电话号码,但你知道了。)但是一切都取决于你的子表达式匹配是多么聪明。当然,上面描述的格式化程序应该有一个故障保护,所以如果正则表达式不匹配,你最终会得到原始的,未格式化的字符串,而不是实际的垃圾。

现在,如果你给你的输入框一个id,你可以附加一个事件监听器,它将读出输入框中的数据,通过你的格式化程序运行它并将其存储回文本字段,如jquery like这样:

var unformatted = $("#myinputbox").val();
var formatted = format_phonenumber(unformatted);
$("#myinputbox").val(formatted);

答案 1 :(得分:0)

jQuery的Masked Input Plugin可能值得一看。