正则表达式没有一致地验证

时间:2015-08-31 14:02:24

标签: php regex

我遇到了一个常见的问题而且我似乎无法确定原因。我正在server side validation处理网站上注册表单上的多个字段。这是PHP

的块
if ('phone-name' == $tag->name) {
        $value = $_POST[$tag->name];
        if (!preg_match('/\+([0-9])([ .-]*\d){7,12}/', $value)) {
            $result->invalidate($tag, "You must enter a valid number: $value is not valid");
        }
    }

我正在使用的regex应该只允许用户输入:

  • " +"登录
  • 空格,圆点和连字符
  • 以及0到9之间的任何数字

然而,当我运行以下测试时,我得到了这些结果:

TEST 1:INVALID INPUT

+3588<script>alert(1)</script>

TEST 2:VALID INPUT

+35388888888<script>alert(1)</script>

我在这里缺少什么吗?为什么正则表达式适用于TEST 2而不适用于TEST 1?非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

因为正则表达式匹配字符串开头的数字。您可以使用^$来匹配字符串长度(开头和结尾),先截断字符串,使用strip_tags等。

示例:

http://www.regexr.com/3bmfm

^\+([0-9])([ .-]*\d){7,12}$

从模式的开头和结尾移除^$,看它是否与第二行匹配。

答案 1 :(得分:-5)

因为您指定了public class Simple extends AnchorPane implements Initializable{ private static final int DEFAULT_VALUE = -10 ; public Simple(@NamedArg("value") int value){ //Loads the FXML sheet FXMLLoader fxmlLoader = new FXMLLoader( getClass().getResource( "Simple.fxml") ); fxmlLoader.setRoot(this); fxmlLoader.setController(this); // set value, avoiding property creation if default... if (value != DEFAULT_VALUE) { setValue(value); } try { fxmlLoader.load(); } catch (IOException exception) { throw new RuntimeException(exception); } System.out.println( "Constructor: " + getValue() ); } @Override public void initialize(URL location, ResourceBundle resources) { System.out.println( "Init: " + getValue() ); } @FXML protected void printValue(ActionEvent ae){ System.out.println( "Button: " + getValue() ); } //Editor field for the value (helps scene builder to render it) IntegerProperty valueProperty; public final void setValue(Integer value){ valueProperty().setValue(value); } public final Integer getValue(){ return valueProperty == null ? DEFAULT_VALUE : valueProperty.get(); } public final IntegerProperty valueProperty() { if( valueProperty == null ) valueProperty = new SimpleIntegerProperty(DEFAULT_VALUE); return valueProperty; } } 重复给定模式的次数。