OVERVIEW When the regex of a <input> pattern contains a character range with a actual dash character (not a range operator), the validation for the form element is always true. Dash characters recognized as range operators are not an issue (like: [0-9]), only dash characters recognized as an actual character in a set (like: [0-9-]). This is a regression because it works as expected on older versions. Is similar to, if not same as: https://github.com/GoogleChrome/chromium-dashboard/issues/3106 STEPS TO REPRODUCE i = document.createElement('input'); i.value = 'asdf'; i.pattern = '^[0-9-]{4}$'; v1 = i.checkValidity(); // returns true instead of false i.pattern = '^[0-9]{4}$'; v2 = i.checkValidity(); // returns false as expected console.log(v1, v2); ACTUAL RESULTS Safari 17: true - false Safari 15: false - false EXPECTED RESULTS false - false
I wonder if it could be because of this change by Anne https://searchfox.org/wubkat/diff/092303e2abb1e89254f64b301953ac0fbf36c681/Source/WebCore/html/BaseTextInputType.cpp#43
<rdar://problem/120106089>
Hey Ian, thank you for reporting this. This is an intentional change in behavior: see bug 251675. You can fix this by escaping - as \\-, although if you set it from script you might need even more backslashes. I suspect \\\\-. As such closing this as INVALID.